正则表达式以字符集开始和结束,但中间有不同的字符集

我正在尝试创建一个正则表达式:

  • 必须是一组字符中的第一个字符 ( FIRST_SET)

  • 可以选择在不同的字符集中包含后续字符 ( SECOND_SET)

  • 但如果它有 2 个或更多字符,最后一个字符必须在FIRST_SET

  • 总长度不能超过MAX_CHARS字符

例子

  • FIRST_SET= ac 或 eg(所以 d 被排除在外)

  • SECOND_SET= 股份公司

  • MAX_CHARS= 10

这是我到目前为止所拥有的:

^[a-c|e-g][a-g]{0,8}[a-c|e-g]{0,1}$

这似乎有效,除非d是最后一个字符和总字符数< MAX_CHARS

有没有办法解决这个问题?


MM们
浏览 93回答 1
1回答

MYYA

您可以使用^(?!.{11})(?=.*[a-ce-g]$)[a-ce-g][a-g]{0,9}$请参阅正则表达式演示。细节^- 字符串的开始(?!.{11})- 最多允许 10 个字符(?=.*[a-ce-g]$)- 在 0 个或多个字符之后,最后一个应该来自FIRST SET[a-ce-g]- 一封来自FIRST SET[a-g]{0,9}- 零到九个字符SECOND SET$- 字符串结束。请注意,|内部字符类匹配文字管道字符,您需要将其从模式中删除。如果(?!.{11})字符串中有任何 11 个字符(换行符除外),则在字符串的开头执行一次否定前瞻,并且匹配失败。您也可以使用(?=.{0,10}$),它只需要在字符串中包含 0 到 10 个字符。
打开App,查看更多内容
随时随地看视频慕课网APP