“至少包含以下一个字母”键入regex issue

“至少包含以下一个字母”键入regex issue,regex,Regex,我遇到了一个问题,让至少一个特定字符类型的正则表达式工作 显然,我的问题也有类似的问题,但我尝试的解决方案并不是解决不正确的匹配 基本上,正则表达式应该匹配: 以正斜杠开头有a-z字母,但必须至少包含a、b或d-此部分应为3到4个字符长,以一位数字结尾,后跟斜杠,URL不需要在此结束-可以更长 我有以下几点,但它没有完全按照预期工作: \/(?=.*[a|b|d])[a-z]{3,4}[\d]\/ 上述表达式与以下表达式中的/ccc1/不匹配,请参见示例: -结尾没有匹配的数字 -匹配项至少有

我遇到了一个问题,让至少一个特定字符类型的正则表达式工作

显然,我的问题也有类似的问题,但我尝试的解决方案并不是解决不正确的匹配

基本上,正则表达式应该匹配:

以正斜杠开头有a-z字母,但必须至少包含a、b或d-此部分应为3到4个字符长,以一位数字结尾,后跟斜杠,URL不需要在此结束-可以更长

我有以下几点,但它没有完全按照预期工作:

\/(?=.*[a|b|d])[a-z]{3,4}[\d]\/
上述表达式与以下表达式中的/ccc1/不匹配,请参见示例:

-结尾没有匹配的数字

-匹配项至少有一个b和数字

-没有匹配项既没有a、b也没有d

-匹配项至少有一个d和数字

-匹配项至少有一个d和数字

-没有太长的比赛

如果有人能指点我到底做错了什么,我将不胜感激。谢谢

您可以使用

^.*\/(?=[a-z]{3,4}\d\/)[a-z]*[abd][a-z]*\d\/
解释

^字符串开头 .*\/匹配到最后一个/ ?=正向前瞻 [a-z]{3,4}\d\/断言字符a-z的3或4倍,后跟1位数字和/ 近距离前瞻 [a-z]*[abd][a-z]*在可选字符a-z之间至少匹配一个a-b或d \d\/匹配1位数字和/
或者,以下操作也可以:

^.*\/(?=[a-z]*[abd])[a-z]{3,4}\d\/
在线查看

^-开始串锚。 .*\/-匹配贪婪直到最后一个正斜杠。 ?=[a-z]*[abd]-带a的正向前瞻,以匹配尽可能多的alpha字符,直到a、b或d。 [a-z]{3,4}\d\/-三到四个字母字符,一个数字和一个正斜杠。
Nice++,您还可以将[^\/]*更改为[a-z]*以防止出现某些错误backtracking@Thefourthbird谢谢我用你的建议更新了答案。这对我也适用,比其他解决方案短一点,更优雅?我不能说我自己。谢谢。@user2007484,不客气。谢谢,这对我很有用,解决了我的错误匹配。