2013-03-15 76 views
0

如何匹配这些标签之间的文本?正则表达式替换标签之间的文本

<!-- |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 2013-03-15 09:17:35

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags去这里以及:) – Sergio 2013-03-15 09:21:34

+0

对不起,我需要所有匹配所有块。 {<! - | IFNOT:ARCHIVE_PAGE | - >一些文字<! - | END:IF | - >}匹配所有带有标签的文本 – Evgeniy 2013-03-15 09:23:28

回答

2

这不是非常值得推荐,但

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

试试这个正则表达式:

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

对不起,我需要所有块都匹配。 {<! - | IFNOT:ARCHIVE_PAGE | - > 部分文字 <! - | END:IF | - >}匹配所有文本与标签 – Evgeniy 2013-03-15 09:20:20

+0

好吧,它不是一个好主意。看看上面的链接,编辑我的正则表达式以匹配想要的 – Sergio 2013-03-15 09:29:24

0

使用Perl,这里唯一的特殊字符是管 '|'。所以,下面的正则表达式匹配(并且由于捕获括号返回(+)。)你正在寻找的文字:

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

注意“S”修饰符让我们的正则表达式匹配多行,和\ s *捕获括号之前和之后意味着返回的匹配项中不会包含空格(包括换行符)。

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

这将取代身体标签之间的整个内容。

相关问题