正则表达式的换行符

时间:2011-02-18 00:11:05

标签: php javascript regex

我正在尝试替换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

2 个答案:

答案 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 的理由