多重匹配和替换

时间:2014-06-04 15:52:53

标签: c# regex

我有这个字符串:

<x>&nbsp;<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>

1 个答案:

答案 0 :(得分:2)

.*greedy所以即使找到匹配后它也会继续。您可以稍微调整正则表达式以更改此行为:

<tg>([^<]*)<pk>([^<]*)</pk></tg>

(即,使用否定的字符类,允许除<<tg>标记内的开头<pk>以外的任何内容)

或:

<tg>(.*?)<pk>(.*?)</pk></tg>

(使用lazy quantifier*一起使引擎匹配尽可能少的事件)