我有一个这样的字符串:
<!NAME!>Admin : <!NAME!><!MSG!>Hello Guys<!MSG!><!ADD-ACC!>BOSS<!ADD-ACC!>
我想编写一个正则表达式模式,在两个相同的标签之间提取文本,如
<!NAME!>Admin : <!NAME!>
<!MSG!>Hello Guys<!MSG!>
<!ADD-ACC!>BOSS<!ADD-ACC!>
所以我写了这个正则表达式:
<!.*!>.*<!.*!>
但它给了我这个结果
<!NAME!>Admin : <!NAME!><!MSG!>Hello Guys<!MSG!><!ADD-ACC!>BOSS<!ADD-ACC!>
我理解为什么会这样做,这是因为
<!NAME!> and <!ADD-ACC!> follows the regex pattern i am using.
所以我在正则表达式中想到类似的东西
<!XXX!>.*<!XXX!> where XXX is the same text between tags so that REGEX could find and extract those tags from text like how i want it to be done.
答案 0 :(得分:4)
您可以使用反向引用
(<!.*?!>).*?\1
.*
是贪婪的量词,其匹配为多
.*?
是一个懒惰的量词,其匹配为 less
(<!.*?!>)
会捕获第1组
我们可以使用\1
在正则表达式中引用第1组中的捕获值。因此,\1
指的是第一个捕获的组值