diff --git a/src/Tokenizer.php b/src/Tokenizer.php index 5682c49..a62bfe3 100644 --- a/src/Tokenizer.php +++ b/src/Tokenizer.php @@ -743,6 +743,7 @@ final class Tokenizer '>', '+', '-', + '~*', // https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-POSIX-REGEXP '*', '/', '!', @@ -820,10 +821,10 @@ private function makeRegexFromList(array $values, bool $sorted = false): string $prefix = (string) $prefix; } - $regex .= preg_quote($prefix, '/'); + $regex .= preg_quote($prefix); $regex .= count($items) === 1 - ? preg_quote(substr(reset($items), strlen($prefix)), '/') + ? preg_quote(substr(reset($items), strlen($prefix))) : $this->makeRegexFromList(array_map(static fn ($v) => substr($v, strlen($prefix)), $items), true); } @@ -887,7 +888,7 @@ private function makeTokenizeRegex(array $regexes): string $parts[] = '(?' . $regex . ')'; } - return '~\G(?:' . implode('|', $parts) . ')~'; + return '(\G(?:' . implode('|', $parts) . '))'; } /** diff --git a/tests/clihighlight.txt b/tests/clihighlight.txt index 75c8429..ceaf391 100644 --- a/tests/clihighlight.txt +++ b/tests/clihighlight.txt @@ -1211,3 +1211,6 @@ MY_NON_TOP_LEVEL_KEYWORD_FX_3(); --- SELECT vector1 <#> vector2 +--- +SELECT + text ~* '\w+' diff --git a/tests/compress.txt b/tests/compress.txt index f7fcba4..6ec44ca 100644 --- a/tests/compress.txt +++ b/tests/compress.txt @@ -115,3 +115,5 @@ CREATE TABLE t (c VARCHAR(20)) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB SELECT '{}'::json #> '{}' --- SELECT vector1 <#> vector2 +--- +SELECT text ~* '\w+' diff --git a/tests/format-highlight.html b/tests/format-highlight.html index a059de3..bafb6f2 100644 --- a/tests/format-highlight.html +++ b/tests/format-highlight.html @@ -1211,3 +1211,6 @@ ---
SELECT
   vector1 <#> vector2
+--- +
SELECT
+  text ~* '\w+'
diff --git a/tests/format.txt b/tests/format.txt index 868db4b..d3bea98 100644 --- a/tests/format.txt +++ b/tests/format.txt @@ -1209,3 +1209,6 @@ SELECT --- SELECT vector1 <#> vector2 +--- +SELECT + text ~* '\w+' diff --git a/tests/highlight.html b/tests/highlight.html index e988db0..9d24e6c 100644 --- a/tests/highlight.html +++ b/tests/highlight.html @@ -429,3 +429,5 @@
SELECT '{}'::json #> '{}'
---
SELECT vector1 <#> vector2
+--- +
SELECT text ~* '\w+'
diff --git a/tests/sql.sql b/tests/sql.sql index c0811e5..2c72c6f 100644 --- a/tests/sql.sql +++ b/tests/sql.sql @@ -429,3 +429,5 @@ CREATE TABLE t (c VARCHAR(20)) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB SELECT '{}'::json #> '{}' --- SELECT vector1 <#> vector2 +--- +SELECT text ~* '\w+'