作为介绍性说明,我知道关于使用 regex 解决问题的老话,并且我也知道使用 RegEx 处理 XML 的注意事项。但请容忍我一会儿……
我正在尝试对一组字符进行正则表达式搜索和替换。我事先不知道该组匹配的频率,但我只想使用特定的上下文进行搜索。
一个例子:如果我有以下字符串"**ab**df**ab**sdf**ab**fdsa**ab**bb"
并且我想搜索"ab"
并替换为"@ab@"
,则使用以下正则表达式可以正常工作:
搜索正则表达式:
(.*?)(ab)(.*?)
代替:
$1@$2@$3
正如预期的那样,我总共得到了四场比赛。在每场比赛中,组 ID 都是相同的,因此反向引用 ($1, $2 ...) 也可以正常工作。
但是,如果我现在向字符串添加某个上下文,则上面的正则表达式会失败:
搜索字符串:
<context>abdfabsdfabfdsaabbb</context>
搜索正则表达式:
<context>(.*?)(ab)(.*?)</context>
这只会找到第一个匹配项。但即使我在原始正则表达式中添加了一个非捕获组,它也不起作用("<context>(?:(.*?)(ab)(.*?))*</context>"
)。
我想要的是第一次搜索中的匹配列表(没有上下文),在每个匹配中,组 ID 都是相同的。
知道如何实现吗?