Я прохожу через строку и обрабатывает все элементы между! – и – !. Но только уникальными элементами являются процессы. Когда у меня есть! – пример …! и еще немного в тексте! – example– !, второй – игнорируется.
Это код:
while ($do = preg_match("/!--(.*?)--!/", $formtext, $matches)){
Я знаю о preg_match_all, но нужно сделать это с помощью preg_match.
Любая помощь? Заранее спасибо!
Вы хотите, чтобы PHP просматривал совпадения только после предыдущего совпадения. Для этого вам нужно будет зафиксировать смещения строк, используя флаг PREG_OFFSET_CAPTURE.
Пример:
$offset = 0; while (preg_match("/!--(.*?)--!/", $formtext, $match, PREG_OFFSET_CAPTURE, $offset)) { // calculate next offset $offset = $match[0][1] + strlen($match[0][0]); // the parenthesis text is accessed like this: $paren = $match[1][0]; }
Для получения дополнительной информации см. Документацию preg_match .
Использовать preg_match_all
edit : некоторые уточнения дают:
$string = '!--example--! asdasd !--example--!'; //either this: $array = preg_split("/!--(.*?)--!/",$string,-1,PREG_SPLIT_DELIM_CAPTURE); var_dump($array); array(5) { [0]=> string(0) "" [1]=> string(7) "example" [2]=> string(10) " asdasd " [3]=> string(7) "example" [4]=> string(0) "" } //or this: $array = preg_split("/(!--(.*?)--!)/",$string,-1,PREG_SPLIT_DELIM_CAPTURE); var_dump($array); array(7) { [0]=> string(0) "" [1]=> string(13) "!--example--!" [2]=> string(7) "example" [3]=> string(10) " asdasd " [4]=> string(13) "!--example--!" [5]=> string(7) "example" [6]=> string(0) "" }
while ($do = preg_match("/[!--(.*?)--!]*/", $formtext, $matches)){
Укажите * в конце шаблона, чтобы указать более одного. Они должны быть добавлены в ваш массив $ matches.