正则表达式捕获顺序:贪婪模式后错误的替代匹配

Cor*_*ell 5 c# regex

我有这种模式:

(\w+)(sin|in|pak|red)$
Run Code Online (Sandbox Code Playgroud)

替换模式是这样的:

$1tak
Run Code Online (Sandbox Code Playgroud)

问题是这个词:

setesin

将转变为:

setestak

代替

setetak

出于某种原因,in始终优先sin于模式.

如何强制执行该模式以遵循该顺序?

Wik*_*żew 9

使用惰性量词:

(\w+?)(sin|in|pak|red)$
    ^
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

\w+包含一个贪婪的量词是:1)抓住尽可能多的字符,因为它可以(并且注意能匹配s,i所有字母,数字和下划线),然后回溯(产生一个字符陆续从右到左移动),试图以适应对于后续的模式.由于in首先找到它,它被匹配,并且整个组被认为是匹配的,正则表达式继续检查字符串的结尾$.惰性量词将使正则表达式引擎\w+?在匹配1个字符字符后跳过,并且将尝试其他模式,从左向右移动.