我有此模式:
(w+)(sin|in|pak|red)$
和替换模式是:
$1tak
问题是这个词:
setesin
将转换为:
setestak
而不是
setetak
由于某种原因,in
总是以模式为sin
。
如何执行模式遵循该顺序?
使用懒惰量词:
(w+?)(sin|in|pak|red)$
^
请参阅Regex Demo
w+
包含一个贪婪的量化器:1)抓住尽可能多的字符(并注意它可以匹配 s
, i
,所有字母,数字和下凸出),然后再回溯左),试图适应后续模式。由于首先找到in
,因此将其匹配,并且整个组被认为是匹配的,因此,将正则连续使用$
检查字符串的末端。懒惰的量词将在匹配1个单词char之后,将跳过w+?
,然后尝试其他模式,从左向右移动。
根本不使用量词:
(w)(?:sin|in|pak|red)$
使用相同的替换
或
B(?:sin|in|pak|red)$
用tak
作为替换。非词边界B
可确保之前有一个单词字符(如果第一个单词字符不是强制性的,则交替删除B
)。
通过这两种方式,首先找到了左侧的第一次出现,并且贪婪的量词不会消耗。