diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-14 16:39:38 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-14 22:19:30 +0900 |
| commit | 7f3171b14a89762b2f0c71969d7243f2297af7c9 (patch) | |
| tree | 37253f75e4f3b1c0e8a3c4161f7186bbe2c1a2d7 /crates/shirabe-php-shim/src/preg.rs | |
| parent | ae113f91fefff415898781272b892d670fcb46f4 (diff) | |
| download | php-shirabe-7f3171b14a89762b2f0c71969d7243f2297af7c9.tar.gz php-shirabe-7f3171b14a89762b2f0c71969d7243f2297af7c9.tar.zst php-shirabe-7f3171b14a89762b2f0c71969d7243f2297af7c9.zip | |
feat(php-shim): implement more shim functions
Diffstat (limited to 'crates/shirabe-php-shim/src/preg.rs')
| -rw-r--r-- | crates/shirabe-php-shim/src/preg.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/crates/shirabe-php-shim/src/preg.rs b/crates/shirabe-php-shim/src/preg.rs index 1429f1c..46d9428 100644 --- a/crates/shirabe-php-shim/src/preg.rs +++ b/crates/shirabe-php-shim/src/preg.rs @@ -393,12 +393,21 @@ fn compile_php_pattern(pattern: &str) -> anyhow::Result<regex::Regex> { .chars() .next() .ok_or_else(|| anyhow::anyhow!("empty regex pattern"))?; + // PCRE allows bracket-style delimiters whose closing character differs from + // the opening one: `(...)`, `{...}`, `[...]`, `<...>`. + let closing = match delimiter { + '(' => ')', + '{' => '}', + '[' => ']', + '<' => '>', + c => c, + }; let end = pattern - .rfind(delimiter) - .filter(|&i| i > 0) + .rfind(closing) + .filter(|&i| i >= delimiter.len_utf8()) .ok_or_else(|| anyhow::anyhow!("unterminated regex pattern: {pattern}"))?; let inner = &pattern[delimiter.len_utf8()..end]; - let modifiers = &pattern[end + delimiter.len_utf8()..]; + let modifiers = &pattern[end + closing.len_utf8()..]; let flags: String = modifiers .chars() |
