我正在尝试替换2个标签之间的所有内容,但我无法构建正确的表达式。
这就是我所做的:/<tag>(.*|\n*)</tag>/
我希望它捕获任何字符,包括换行符。
这是我需要捕捉的一个例子:
<tag>
<div class="feed_title">Some Title</div>
<div class="feed_content">Some text</div>
</tag>
你们有些人能告诉我我做错了吗?
以下是RegExr的链接以及内容的完整示例:http://regexr.com?2t4n1
答案 0 :(得分:3)
也许你打算这样做?
# The ... in this example is your text to match
preg_match("#<tag>(.*?)</tag>#s","...",$matches);
以下是使用PHP的XML data extraction using regular expressions文章的链接,其中有一些很好的例子。
答案 1 :(得分:3)
'#.#m'
m 表示MULTILINE,它使点能够匹配换行符=换行符 \ n
编辑:
由于它已被敏锐的眼睛和良好的大脑纠正,显然'#。+#s'EDIT2:
正如Michael Goldshteyn所说,这应该有效
$ch = '<tag>\s+<div class="feed_title">Some Title</div>\s+<div class="feed_content">Some text</div>\s+</tag>'
preg_match('#<tag>(.+?)</tag>#s',$ch,$match)
还有另一个解决方案,我认为没有 s 标志:
preg_match('#<tag>((.|\s)+?)</tag>#',$ch,$match)
但它更复杂
编辑3:
我认为$ ch 中 \ s 的存在是无稽之谈。 \ s 用于RE,而不是字符串。
我之所以这么写,是因为我认为它可能是&lt; 标记之前的空白或 \ t ; ,并在其他行的开头
\ t 是用逃脱写的;这也不是在字符串
中写 \ s 的理由