Я пытаюсь найти все совпадения в строке. По какой-то причине, если мое совпадение находится в начале строки, оно не возвращает этого конкретного совпадения. Связано ли это с индексом 0? Я также использую PREG_OFFSET_CAPTURE для получения индексов против совпадений. Ниже приведен код работы нерабочего.PHP preg_match_all не находит первое совпадение
$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);
Результатом которого является:
Array ([0] => Array ([0] => Array ([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);
Результатом которого является:
Array ([0] => Array ([0] => Array ([0] => [QUOTE] [1] => 1) [1 ] => Массив ([0] => [QUOTE] [1] => 20) [2] => Массив ([0] => [QUOTE] [1] => 101)))
Все три Матчи. Если кто-нибудь может помочь мне выяснить, должен ли меня изменить REGEX или если есть какая-то причуда, о которой я не знаю, это было бы очень признательно. Я пробовал это же, используя Python и re library, и он возвращает все мои матчи. Я также использовал этот http://www.regextester.com/, и он сообщает, что он работает в обоих сценариях и соответствует всем, как должен. Моя единственная догадка связана с тем, что PREG_OFFSET_CAPTURE находит совпадение в позиции 0 и 0 вызывает некоторую проблему.
Заранее благодарим за любую помощь!
+1 Лучше, чем мое ... – jeroen
Вы - святой Wrikken, если бы был способ опрокинуть вас, я бы сделал это: D – Skylude