我有这个字符串:
<x> <span class='var'>or<tg>test<pk>testing</pk></tg><tx>or</tx><tg>teste<pk>testando</pk></tg></span></x>
我正在使用这种模式:
<tg>(.*)<pk>(.*)</pk></tg>
但它正在从第一个<tg>
替换到最后一个,而忽略了中间的</tg>
。
我的替换字符串:
<a href='def.aspx?&word=$2'>$1</a>
答案 0 :(得分:2)
.*
是greedy所以即使找到匹配后它也会继续。您可以稍微调整正则表达式以更改此行为:
<tg>([^<]*)<pk>([^<]*)</pk></tg>
(即,使用否定的字符类,允许除<
和<tg>
标记内的开头<pk>
以外的任何内容)
或:
<tg>(.*?)<pk>(.*?)</pk></tg>
(使用lazy quantifier与*
一起使引擎匹配尽可能少的事件)