我有以下文字

<msgText>H3ll0World</msgText><msgText>HelloWorld</msgText><otherTagWithNumbers>456</otherTagWithNumbers>


我只需要检索标签[\d]中的数字(<msgText>)即可替换它们。在这种情况下,正则表达式将返回3和0。

到目前为止,我有:

(<msgText>)([\s\S]*?)(<\/msgText>)


Here我有一个这种情况的例子。

最佳答案

您想使用正面的前瞻方式来查看但不消耗:

\d+(?=(?:(?!<\/?\w+>).)*<\/msgText>)


分解:


\d+匹配任意数字
(?=然后是


(?:(?!<\/?\w+>).)*脾气暴躁的令牌,可以匹配任何东西,但不能匹配
传递标签
<\/msgText>直到结束标签

)正向超前结束


以上是严格的匹配条件,但在某些情况下有很短的实现方法:

\d+(?=[^<]*<\/msgText>)


Live demo

07-28 02:45