我有以下文字
<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