我正在尝试创建一个正则表达式:
FIRST_SET
)中的第一个字符SECOND_SET
)FIRST_SET
MAX_CHARS
个字符示例
FIRST_SET
= a-c或e-g(因此不包括d)SECOND_SET
= a-g MAX_CHARS
= 10 这是我到目前为止所拥有的:
^[a-c|e-g][a-g]{0,8}[a-c|e-g]{0,1}$
这似乎可行,除非d
是最后一个字符,字符总数为< MAX_CHARS
有没有办法解决这个问题?
答案 0 :(得分:2)
您可以使用
^(?!.{11})(?=.*[a-ce-g]$)[a-ce-g][a-g]{0,9}$
请参见regex demo。
详细信息
^
-字符串的开头(?!.{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个字符的字符串。