多重匹配和替换

本文关键字:替换 | 更新日期: 2023-09-27 18:06:36

我有这个字符串:

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

多重匹配和替换

.*贪婪的所以它在找到匹配后继续。您可以稍微调整正则表达式来改变这种行为:

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

(也就是说,允许在<tg><pk>标签内使用否定的字符类打开<之外的任何内容)

或:

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

(使用*的惰性量词使引擎匹配尽可能少的出现)