2

我有一个这样的字符串:

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

1 回答 1

4

您可以使用反向引用

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

.*是尽可能匹配的贪心量词

.*?是一个尽可能匹配的惰性量词

(<!.*?!>)将捕获组 1中的标签

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

于 2013-07-10T16:16:39.310 回答