是否有一种模式可以从字符串中的多个选项中查找是否只有一个匹配项?
假设我们有以下潜在匹配列表:
`foo|bar|baz`
我们有字符串:
`Foo bar, Cambaz!` // shoud not match due to multiple findings
`My bar, good!` // shoud match for `bar`
`My friend, Cambaz!` // shoud match for baz
不区分大小写。
最佳答案
使用
(?i)^(?:(?!foo|bar|baz).)*\K(?:foo|bar|baz)(?!.*(?:foo|bar|baz))
见 proof .
匹配一些与第一个匹配项(^(?:(?!foo|bar|baz).)*
)之前不匹配的任何备选文本,省略匹配的文本(\K
),匹配列表中的单词((?:foo|bar|baz)
),然后检查那里文本后面的列表中没有任何单词 ( (?!.*(?:foo|bar|baz))
)。
(?i)
- 不区分大小写。
带子程序的简化版:
(?i)^(?:(?!(foo|bar|baz)).)*\K\g<1>(?!.*\g<1>)
\g<1>
代表 (foo|bar|baz)
模式。
关于如果字符串中的多个选项中只有一个匹配项,则正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62415551/