2015-02-11 3 views
1

Я ищу шаблон preg_replace, используемый для замены текста, который является обратным к двум линиям. Я хочу, чтобы преобразовать это:Как использовать preg_replace над двумя строками

... </li></ul> 
<ul><li> ... 

к этому:

... </li> 
<li> ... 

или это:

... </li><li> ... 

Конечно, $pattern = "/<\/ul><ul>/" и $replacement = "" производит то, что я ищу если ul теги находятся в одной строке. Однако, как только появляется новая строка между тегами ul, шаблон не работает.

Узор $pattern = "/<\/ul>.*<ul>/s" работы в единичном случае, но это ужасно, когда дело доходит до

... </li></ul> 

... THIS IS SOME VALUABLE CONTENT ... 

<ul><li> ... 

Я знаю, что должен быть \n, \r, <br \/>, или некоторая комбинация, которая должна идти между ul теги, но я не смог найти правильное решение.

(Я понимаю, что существует потенциально лучшее решение, чем preg_replace для случая, описанного выше, но оно является одним из ряда шаблонов и заменяет пары, которые я использую итеративно в синтаксическом анализаторе, поэтому я хочу придерживаться его .)

ответ

1

Если вы просто пытаетесь заменить ul метки на две строки с возможным пробельных ...

$str = preg_replace('~</ul>\R*<ul>~', '', $str); 

в противном случае, если пытаться заменить все между; добавьте нежеланный квантификатор в ваше регулярное выражение.

$str = preg_replace('~</ul>.*?<ul>~s', '', $str); 
Смежные вопросы