我有四个字符串,分别是“a.mob”,“b.mob”,“c.mob”,“d.mob”,“e.mob”
我想匹配“a.mob”,“b.mob”,“d.mob”以及任何以“.mob”结尾但不包括“c.mob”和“e.mob”的字符串,我尝试编写一个正则表达式比赛:
"^(?!.*(c|e)).*?(?!mob)"
它完成了工作,但我认为很难阅读和获取。
在我看来,也许有一些简单明了的简单匹配。
我的问题是,我的比赛太复杂了吗?正则表达式是最好的解决方案吗?
最佳答案
欢迎来到SO。
如果要“匹配以某些结尾的字符串”,则必须在正则表达式中使用$
(并且不要忘记引用.
,这是regexen中的特殊字符):
"^[^ce]\\.mob$"
(例如,您将匹配
biloximob5
)。如果您的字符串可能与所显示的五个字符串不同,则可能必须更通用一些:
"^([^ce]|..+)?\\.mob$"
例如,匹配
.mob
,elefante.mob
,但不匹配.mobi
或e.mob
...我可以建议像regexr这样的正则表达式尝试工具吗?这可能是一个好主意,因此您可以培训使用regexen。
更新:当您从perl / regexr返回到c++时,请不要忘记引用反斜杠。