我有这种模式:
(\w+)(sin|in|pak|red)$
Run Code Online (Sandbox Code Playgroud)
替换模式是这样的:
$1tak
Run Code Online (Sandbox Code Playgroud)
问题是这个词:
setesin
将转变为:
setestak
代替
setetak
出于某种原因,in始终优先sin于模式.
如何强制执行该模式以遵循该顺序?
使用惰性量词:
(\w+?)(sin|in|pak|red)$
^
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
该\w+包含一个贪婪的量词是:1)抓住尽可能多的字符,因为它可以(并且注意能匹配s,i所有字母,数字和下划线),然后回溯(产生一个字符陆续从右到左移动),试图以适应对于后续的模式.由于in首先找到它,它被匹配,并且整个组被认为是匹配的,正则表达式继续检查字符串的结尾$.惰性量词将使正则表达式引擎\w+?在匹配1个字符字符后跳过,并且将尝试其他模式,从左向右移动.