正则表达式完全匹配

时间:2017-07-08 18:16:41

标签: regex

我正在尝试理解正则表达式:

我只需匹配 text_01 text_02 并过滤掉标记。

<span>text_01<b>text_02</b>

我试过这样做:

(?<=<span>)(([^>]+)<b>)(.+?)(?=</b>)

但是它捕获了3个组,并且完全匹配包含一个标记。

text_01<b>text_02

您是否可以就如何构建正则表达式提供建议?正则表达式的完整匹配仅包含文本而没有标记?

2 个答案:

答案 0 :(得分:0)

通过使用非捕获组,您可以将中间<b>标记排除为捕获组,但如果不包含标记,您将永远无法获得完整匹配。这是不可能的,正则表达式在捕获时不能跳过一部分。匹配必须是连续的。

(?<=<span>)(.+?)(?:<b>)(.+?)(?=<\/b>)
  • 完全匹配text_01<b>text_02
  • 第1组text_01
  • 第2组text_02

答案 1 :(得分:0)

使用正则表达式解析HTML会变得非常复杂。通常它是not advised practice并且更好地使用解析器(某些库使用您正在使用的任何语言)。

但是,如果您确定文字内容没有<>,并且这些<>未嵌套,您可以使用此:

[^<>]*(?=<[^<>]*>)

这仅匹配一对<>后面的文字。

如果足以测试该文本后跟<,则可以简单地说:

[^<>]*(?=<)