Regex-仅当存在一组单词时捕获
例如:Regex-仅当存在一组单词时捕获,regex,Regex,例如: "Washroom L20 is broken" "LAV #L20 needs to be fixed" "R20 lavatory is broken" "Lav issue - check L20" 在只捕获L20或R20之前,我想检查句子中是否存在洗手间、厕所、Lav。有什么建议吗 我能够抓住前两个,但在剩下的时间里我一直在努力 我尝试的是: (?:(?:(?:LAV?)|(?:LAVATORY?)|(?:WASHROOM?))(?:\s*?))(?:(?:['#@:+-]?\
"Washroom L20 is broken"
"LAV #L20 needs to be fixed"
"R20 lavatory is broken"
"Lav issue - check L20"
在只捕获L20或R20之前,我想检查句子中是否存在洗手间、厕所、Lav。有什么建议吗
我能够抓住前两个,但在剩下的时间里我一直在努力
我尝试的是:
(?:(?:(?:LAV?)|(?:LAVATORY?)|(?:WASHROOM?))(?:\s*?))(?:(?:['#@:+-]?\s?)(\b[LR]\d{1,2}\b))
提前感谢您的帮助这取决于您的引擎是否支持查找后断言。 如果是这样的话,这应该是可行的: 使用空白边界
?im^?=.*:lav|盥洗室。*?一种不让人望而却步的可能方式:
(?:washroom|lav(?:atory)?).*?([lr]20)|([lr]20).*?(?:washroom|lav(?:atory)?)
使用PHP正则表达式,因此根据您的引擎可能会有一些差异。
它基本上是按任意顺序查找两个组件中的任何一个,它们之间有任何字符
使用此选项可实时检查并可视化您的正则表达式。这很有帮助。
(?im)
^
(?=
.*
(?: lav | washroom )
)
.*
['#@:+-]? [^\S\r\n]?
\b
( [lr] \d{1,2} ) # (1)
\b
(?:washroom|lav(?:atory)?).*?([lr]20)|([lr]20).*?(?:washroom|lav(?:atory)?)