正则表达式:在两个未知标签之间找到文本

时间:2013-07-10 16:14:53

标签: regex match validation

我有一个这样的字符串:

<!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.

1 个答案:

答案 0 :(得分:4)

您可以使用反向引用

(<!.*?!>).*?\1

.*是贪婪的量词,其匹配为

.*?是一个懒惰的量词,其匹配为 less

(<!.*?!>)会捕获第1组

中的标记

我们可以使用\1在正则表达式中引用第1组中的捕获值。因此,\1指的是第一个捕获的组值