正则表达式替代方案(a | b | c)可以与模式的结尾一起使用吗?

时间:2018-03-08 18:26:36

标签: regex

我有一个正则表达式模式,我用来尝试匹配<a><em>或引用"中包含的任何内容。

(?:<a.*?>|<em>|")(.*?)(?:"|<\/em>|<\/a>)

但是,我想要做的是强迫<a>一起工作,<em>等等。我希望发生的事情是匹配以<a>开头但以"结尾的字符串。

例如:

<a href='google.com'>"Google"</a>

应该返回Google和(可能还有"Google",但这不是什么大问题。但是,目前,它返回href='google.com'>作为匹配(并完全忽略“Google”),因为它以“正确”模式开始和结束。

您可以看到此特定模式中断的所有方式here on Regex101

那么有没有办法告诉正则表达式,如果它与<a>开始匹配,它必须以</a>结束(并且其他模式也一样)?

1 个答案:

答案 0 :(得分:1)

您需要后退参考

<(a|em|")[^>]*>(.*?)(?:</\1>)

请参阅live demo

您的目标位于第2组(如果使用反向引用,则无法避免将标记捕获为第1组)。