正则表达式匹配两个字符串之间的所有内容,spaning多行

时间:2013-05-30 15:27:43

标签: regex

我如何正则表达式匹配两个字符串之间的所有内容? 两个字符串之间的东西跨越几行,也可以包含所有html字符。

例如:

<p>something</p>

<!-- OPTIONAL -->

<p class="sdf"> some text</p>
<p> some other text</p>

<!-- OPTIONAL END -->

<p>The end</p>

我想剥掉整个可选部分。但贪婪的任何角色匹配都没有做我想要的......我正在使用的模式是

  • <!-- OPTIONAL -->.*<!-- OPTIONAL END -->
  • <!-- OPTIONAL -->(.*)<!-- OPTIONAL END -->
  • <!-- OPTIONAL -->(.*)\s+<!-- OPTIONAL END -->
  • (?=<!-- OPTIONAL -->)(.*)\s+<!-- OPTIONAL END -->

如果仅给出第一部分,则所有这些标记都匹配第一个可选标记,但是对于完整的行不能很好。

以下是一个示例:http://regexr.com?352bk

由于

4 个答案:

答案 0 :(得分:8)

要正确使用正则表达式,请在?之后使用*

<!-- OPTIONAL -->(.*?)<!-- OPTIONAL END -->

这对你有帮助吗?

另外,根据您使用的编程语言,您还可以使用修饰符来使您的正则表达式点(.)匹配换行符。对于PHP,您可以使用s(dotall)修饰符,例如:

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

答案 1 :(得分:6)

检查RegExr中的dotall复选框:)

如果没有dotall标志(s中的/regex/s),则点(.)将与回车符不匹配。

您应该使用.*?代替.*与可选内容进行延迟匹配(请参阅示例中的PLEASE DO NOT MATCH!句子)。

答案 2 :(得分:3)

玩你的例子我想我找到了答案,请在你的代码中查看:

&#13;
&#13;
<!-- OPTIONAL -->[\w\W]*<!-- OPTIONAL END -->
&#13;
&#13;
&#13;

我希望得到这个帮助

答案 3 :(得分:2)

启用“dotall”选项以便。在正则表达式中将匹配换行符并跨多行工作。根据您的正则表达式的实现,有多种方法可以执行此操作,请查看实施手册。