我試圖找到字符串中的所有比賽。出於某種原因,如果我的匹配是在字符串的開頭,它不會返回該特定的匹配。它與索引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);
其結果是:
陣列([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] => Array([0] => [QUOTE] [1] => 101)))
All three火柴。如果任何人都可以幫我弄清楚我的REGEX是否需要修改,或者如果有一些怪癖,我不知道它會非常感激。我已經嘗試了使用Python和re庫的同樣的事情,並且它返回了我所有的匹配。我也利用這個http://www.regextester.com/,它報告它在兩種情況下工作,並按照它應該匹配的一切。我唯一的猜測是與PREG_OFFSET_CAPTURE在位置0找到一個匹配和0導致一些問題有關。
預先感謝任何幫助!
+1比我好...... – jeroen 2013-03-06 20:19:02
你是一個聖人Wrikken,如果有一種方式來提示你,我會做到這一點:d – Skylude 2013-03-06 22:52:25