假设我有以下字符串:"BENffew123X\r\nBENx432f456X\r\nBEN!233789X\r\nBEN4545789X"
我想要一个能捕获“BEN!233789”的正则表达式,它必须非贪婪地查找“BEN”,后跟任何字符(不包括“BEN”一词)并以 789X 结尾。我尝试了正则表达式:/BEN.+?789X/mi
,我得到了 "BENffew123X\r\nBENx432f456X\r\nBEN!233789X"
作为匹配项。
我知道这个正则表达式寻找第一个“BEN”并捕获字符串的开头,但我希望它寻找最接近第一个“789X”的“BEN”。我怎样才能做到这一点?一个想法是反转字符串,我应该这样做吗?
最佳答案
您需要确保 BEN
不出现在 BEN
和 789X
之间的文本中。您可以使用 negative lookahead assertion 执行此操作:
/BEN(?:(?!BEN).)*?789X/mi
解释:
BEN # Match "BEN"
(?: # Start of non-capturing group that matches...
(?!BEN) # (if "BEN" can't be matched here)
. # any character
)*? # Repeat any number of times, as few as possible
789X # Match 789X
关于Ruby Regex 非贪婪匹配 : looking for the closest occurrence of a phrase left to a searched word,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21659120/