0

假设我有字符串:

we have apple, coconut and grapes.

如果我使用正则表达式:

^.*\b((apple)|(coconut)|(grape)|(grapes)).*$

替换为

|$2|$3|$4|$5

|||grape|它将在贪婪时输出.*,然后从右到左匹配。

在尝试第 2 组或第 3 组之前,我如何优先考虑替换以首先尝试整个字符串的第一个模式组(在我的示例中为 '(apple)')等等,有点像当我只匹配一个字符时发生这种情况替换之间的顺序grapes并将grape输出更改为|||grapes|.

我可以使用多个替换来做到这一点,但我担心从 mssql 多次调用正则表达式的开销可能会导致过多的开销。

4

2 回答 2

2

试试这样的可能吗?

^((?:.*?(\bapple\b))|(?:.*?(\bcoconut\b))|(?:.*?(\bgrape\b))|(?:.*?(\bgrapes\b))).*$

apple具有优先级,然后coconut,之后grape,最后grapes

于 2013-09-25T10:28:01.693 回答
0

正则表达式交替中的替代项是从左到右尝试的,因此您要么需要先放置较长的替代项

^.*\b((apple)|(coconut)|(grapes)|(grape)).*$

或通过使用另一个单词边界确保只有整个单词匹配:

^.*\b((apple)|(coconut)|(grape)|(grapes))\b.*$
于 2013-09-25T10:10:50.020 回答