【发布时间】:2021-04-08 10:40:37
【问题描述】:
我的 PHP 版本是PHP 7.2.24-0ubuntu0.18.04.7 (cli)。但是,我测试过的所有版本似乎都会出现此问题。
我在使用 preg_match 时遇到了一个非常奇怪的错误。有人知道解决办法吗?
这里的第一部分代码有效,第二部分无效。但是正则表达式本身是有效的。出于某种原因,something_happened 字导致它失败。
$one = ' (branch|leaf)';
echo "ONE:\n";
preg_match('/(?:\( ?)?((?:(?:\**\[(?:!?\d+)?\])*\**[A-Za-z_]\w*)+(?: ?\| ?(?:\**\[(?:!?\d+)?\])*\**[A-Za-z_]\w*)+)(?: ?\))?/', $one, $matches, PREG_OFFSET_CAPTURE);
print_r($matches); // this works
$two = 'something_happened (branch|leaf)';
echo "\nTWO:\n";
preg_match('/(?:\( ?)?((?:(?:\**\[(?:!?\d+)?\])*\**[A-Za-z_]\w*)+(?: ?\| ?(?:\**\[(?:!?\d+)?\])*\**[A-Za-z_]\w*)+)(?: ?\))?/', $two, $matches2, PREG_OFFSET_CAPTURE);
print_r($matches2); // this doesn't work
它似乎与something_happened 这个词有关。如果我改变这个词,它会起作用。
正则表达式匹配 2 个或多个由 | 分隔的类型名称,它们可能会或可能不会被 () 包围,并且每个类型名称前面可能有也可能没有任何数量的 [](或 @987654332 @ 或 [!some number]) 和 *。
试试看吧!如果您知道如何解决,请告诉我!
【问题讨论】:
标签: php regex preg-match