我正在尝试查找字符串中的所有匹配项。出于某种原因,如果我的匹配位于字符串的开头,则它不会返回该特定匹配。它与索引0有关吗?我还使用 PREG_OFFSET_CAPTURE 来获取索引与匹配项。下面是工作非工作的代码。
$text = '[QUOTE]I wonder why[QUOTE]PHP[IMG]hates me[/IMG][/QUOTE][/QUOTE][URL="http://www.bing.com"]Click me![QUOTE]........[/QUOTE]Ok Bai![/URL]';
preg_match_all('#\[QUOTE\]#', $text, $matches, PREG_OFFSET_CAPTURE, PREG_PATTERN_ORDER);
print_r($matches);
结果是:
数组 ( [0] => 数组 ( [0] => 数组 ( [0] => [QUOTE] [1] => 19 ) [1] => 数组 ( [0] => [QUOTE] [1] = > 100 ) ) )
如您所见,它只找到了两个匹配项。如果我在字符串的开头添加一个字符,它将找到所有三个字符。
$text = 'a[QUOTE]I wonder why[QUOTE]PHP[IMG]hates me[/IMG][/QUOTE][/QUOTE][URL="http://www.bing.com"]Click me![QUOTE]........[/QUOTE]Ok Bai![/URL]';
preg_match_all('#\[QUOTE\]#', $text, $matches, PREG_OFFSET_CAPTURE, PREG_PATTERN_ORDER);
print_r($matches);
结果是:
数组 ( [0] => 数组 ( [0] => 数组 ( [0] => [QUOTE] [1] => 1 ) [1] => 数组 ( [0] => [QUOTE] [1] = > 20 ) [2] => 数组 ( [0] => [QUOTE] [1] => 101 ) ) )
全部三场比赛。如果有人可以帮助我弄清楚我的 REGEX 是否需要修改,或者是否有一些我不知道的怪癖,我将不胜感激。我已经使用 Python 和 re 库尝试过同样的事情,它返回了我所有的匹配项。我还使用了这个http://www.regextester.com/,它报告说它在两种情况下都可以工作,并且可以匹配所有内容。我唯一的猜测是与 PREG_OFFSET_CAPTURE 在位置 0 找到匹配项和 0 导致一些问题有关。
提前感谢您的任何帮助!