我需要一个能够查找的正则表达式" ship"在任何instacne,所以:船,宇宙飞船,星舰,航运等。但它不需要查找"战舰"。它也需要不区分大小写。目前我已经:
(?!(军舰))(?ⅰ)船
...查找"发货"但仍然抬头看战舰"战舰"感谢它含有" ship"。我试过了:
(?!(军舰))^(?ⅰ)船
......在某种程度上有效,但随后是星舰"例如,没有返回。我确定答案非常简单,但我现在还不能看到。你的帮助会很棒!
答案 0 :(得分:2)
首先,我想尝试消极的外观:
/(?<!war)ship/
它应匹配所有单词而不是warship
。但它仅获得ship
部分。因此,如果您只是通过regexp检查字符串,但是如果您想获得匹配的单词则无法正常工作,这是可以的。
答案 1 :(得分:1)
我想你想要这样的东西,
(?i)^(?!warship$)(?=.*ship).*
它匹配任何船舶实例,但不匹配warship
OR
(?i)\b\w*?(?<!war)ship\w*?\b
答案 2 :(得分:1)
我建议搜索字符串:
(?i)(\w*ships?)(?<!warship)(?<!warships)
(?i)
...启用不区分大小写的搜索。
(\w*ships?)
...匹配任何以0或更多单词字符开头的字符串,在标记组中包含ship
,并且可选地还包含复数s
。也可以是(\b\w*ship\w*\b)
或(\b[a-z]*ship[a-z]*\b)
来查找内部任何位置ship
的完整单词。
(?<!warship)(?<!warships)
...两个负面的回顾,检查找到的单词是warship
还是warships
。
答案 3 :(得分:1)
看起来你可能正在使用.NET引擎或类似的表达方式,所以你可以使用lookbehind。
首先,你需要一个正则表达式来匹配整个单词:
\w*ship\w*
然后,您可以轻松修改它,使其与war
之前ship
之前的任何内容都不匹配,使用负面的背后隐藏。
\w*(?<!war)ship\w*
此外,可能没有理由在正则表达式本身中指定不区分大小写标记,只需在创建它时将其应用于正则表达式对象。