假设我有字符串:
we have apple, coconut and grapes.
如果我使用正则表达式:
^.*\b((apple)|(coconut)|(grape)|(grapes)).*$
替换为
|$2|$3|$4|$5
它会在|||grape|
贪婪后输出.*
,然后从右到左匹配。
在尝试第2组或第3组之前,我怎样才能优先考虑替换首先尝试第一个模式组(在我的示例中为'(apple)')作为整个字符串,依此类推当我在grapes
和grape
之间替换订单时,将输出更改为|||grapes|
,就像只有一个字符匹配一样。
我可以使用多次替换来执行此操作,但我担心多次从mssql调用regex的开销可能会导致过多的开销。
答案 0 :(得分:2)
尝试这样的事情吗?
^((?:.*?(\bapple\b))|(?:.*?(\bcoconut\b))|(?:.*?(\bgrape\b))|(?:.*?(\bgrapes\b))).*$
apple
优先,然后是coconut
,之后是grape
,最后是grapes
。
答案 1 :(得分:0)
正则表达式替换中的替代方案是从左到右尝试的,因此您需要先填写较长的替代方案
^.*\b((apple)|(coconut)|(grapes)|(grape)).*$
或确保只使用另一个单词边界匹配整个单词:
^.*\b((apple)|(coconut)|(grape)|(grapes))\b.*$