10

如何正则表达式匹配两个字符串之间的所有内容?两个字符串之间的内容跨越几行,也可以包含所有 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

4 回答 4

9

检查 RegExr 中的 dotall 复选框:)

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

您应该使用.*?而不是.*惰性匹配可选内容(参见PLEASE DO NOT MATCH!示例中的句子)。

于 2013-05-30T15:30:13.833 回答
8

To make a regex ungreedy, use a ? after the *:

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

Does this help you?

Also depending on your programming language you use, you have modifiers that will make your regex dot (.) match newlines too. For PHP you have the s (dotall) modifier for example:

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

于 2013-05-30T15:34:07.217 回答
4

玩你的例子我想我找到了答案,在你的代码中检查这个:

<!-- OPTIONAL -->[\w\W]*<!-- OPTIONAL END -->

我希望这会有所帮助

于 2015-06-30T23:20:06.813 回答
2

启用“dotall”选项,以便 . in regex 将匹配换行符并跨多行工作。根据您对正则表达式的实施,有多种方法可以做到这一点,请查看您的实施手册。

于 2013-05-30T15:30:59.300 回答