2013-03-15 8 views
0

Как совместить текст между этими тегами?Regex заменить текст между тегами

<!-- |IFNOT:ARCHIVE_PAGE| --> 
some text 
<!-- |END:IF| --> 

Thanx!

+0

http://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-why-it-is-hard-to-parse-xml-and-html-with-a-reg – RainHeart257

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags также здесь :) – Sergio

+0

Извините, мне нужно все совпадение со всем блоком. { некоторый текст } соответствует всем текстам этого текста с тегами – Evgeniy

ответ

2

Это не очень рекомендуется, но

<!-- \|IFNOT:ARCHIVE_PAGE\| -->((\s|.)*?)<!-- \|END:IF\| --> 
1

попробовать это регулярное выражение:

(?<=<!-- \|IFNOT:ARCHIVE_PAGE\| -->)(\s|.)*?(?=<!-- \|END:IF\| -->) 
+0

Извините, мне нужно все совпадение со всем блоком. { некоторый текст } весь текст текст текст с тегами – Evgeniy

+0

ну, это не очень хорошая идея. Посмотрите на ссылки выше, отредактировал мое регулярное выражение, чтобы соответствовать желаемому – Sergio

0

Использование Perl, единственный специальный символ, здесь есть труба '|'. Таким образом, следующее регулярное выражение будет соответствовать (и возвращению из-за захват скобки (+).) Текст, который вы ищете:

{<!-- \|IFNOT:ARCHIVE_PAGE\| -->\s*(.+)\s*<!-- \|END:IF\| -->}s 

Обратите внимание, что соответствует регулярному выражению несколько выстилает «S» Изменявшего ДАВАЙТЕ, а \ s * до и после захватных скобок означает, что пробелы (включая разрывы строк) не будут включены в возвращаемое совпадение.

2
preg_replace("/<body>([\s\S]*.*)<\/body>/",$replace,$origional); 

это заменит весь контент между тегами тела.