我有四个字符串,分别是“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$"

例如,匹配.mobelefante.mob,但不匹配.mobie.mob ...

我可以建议像regexr这样的正则表达式尝试工具吗?这可能是一个好主意,因此您可以培训使用regexen。

更新:当您从perl / regexr返回到c++时,请不要忘记引用反斜杠。

08-27 20:00