Regex 需要正则表达式的帮助
我需要一个正则表达式,用于: 字符串为字母数字,前半部分正好有6个字符,后跟连字符(可选),后接可选的4个字符:(后半部分不能超过4个字符) 因此,以下任何一项都是有效的Regex 需要正则表达式的帮助,regex,Regex,我需要一个正则表达式,用于: 字符串为字母数字,前半部分正好有6个字符,后跟连字符(可选),后接可选的4个字符:(后半部分不能超过4个字符) 因此,以下任何一项都是有效的 11111A 111111-1 111111-yy yyyyy-989 yyyyyy-9090 我认为这个表达式/[a-zA-Z0-9]([-])?[a-zA-Z0-9]{5,10}$/应该可以工作,但我无法让它正常工作 如果您的前6个和后4个仅为字母数字,将不胜感激,^[a-zA-Z0-9]{6}([a-zA-Z0-9]{
11111A
111111-1
111111-yy
yyyyy-989
yyyyyy-9090
我认为这个表达式/[a-zA-Z0-9]([-])?[a-zA-Z0-9]{5,10}$/代码>应该可以工作,但我无法让它正常工作
如果您的前6个和后4个仅为字母数字,将不胜感激,^[a-zA-Z0-9]{6}([a-zA-Z0-9]{1,4})$:
^[a-zA-Z0-9]{6}(-[A-Za-z0-9]{1,4})?$
^\w{6}-?\w{0,4}$
注意:\w
是[a-zA-Z0-9\]
的便捷快捷方式,但它允许使用下划线(
)。如果您不想要这些,只需将其替换为[a-zA-Z0-9]
更新
避免零的两种方法:
拆分组,如果您知道最后一个数字(例如)不能为0
^\w{5}[a-zA-Z1-9]-?\w{0,3}[a-zA-Z1-9]$
,非常强大,但并非在所有regex“Flavors”(实现)中都可用:
^(?!0{6})\w{6}-?(?!0+$)\w{0,4}$
这些“零宽度”断言不使用字符,它们只检查前面的内容,并在遇到模式时导致匹配失败(如果是负面前瞻)。第一个很简单,检查我们是否正好有六个0。第二个检查行/字符串的结尾($
)之前是否有一个或多个(+
)0
这并不像其他一些简洁,但它是防弹的。Tanascius和Streetpc的解决方案将匹配\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
一个问题:你说破折号是可选的,下面四个字符是可选的,那么这是否意味着111111AAAA
应该匹配?如果是这样的话,我上面的正则表达式是为你准备的,因为Tanascius'不会匹配这个
如果不是这样,那么您需要:
^[a-zA-Z0-9]{6}(?:-[a-zA-Z0-9]{1,4})?$
这使得使用稍微更有效的无后向引用分组
最后一件事。此解决方案不匹配111111-
,但将匹配11111-A
。如果您想匹配111111-
,但又不想匹配111111 a
,请执行以下操作:
^[a-zA-Z0-9]{6}(?:-[a-zA-Z0-9]{0,4})?$
编辑:Tanascius的解决方案不再使用\w
,因此忽略上面关于这一点的内容。可能是离题了,但因为我根本不是正则表达式专家,所以我经常使用TXT2正则表达式程序,它可以帮助从文本菜单构建它们
忍不住要引用这句话:“一个程序员遇到了一个问题。他意识到他可以用正则表达式来解决它。现在他有两个问题。”它们可以是数字,也可以是字母数字,字母数字意味着字母或数字\w
与[a-zA-Z0-9\
相同,如果我想添加另一个条件,说明前半部分或/和后半部分不能全部为零,该怎么办?谢谢你的帮助help@tanascius:\w不是[a-zA-Z0-9]的同义词,它可能包含其他字符,如下划线u@user268375:Notepad++似乎使用了非常原始的闪烁正则表达式引擎,例如,它不理解{n}。您说“前半部分正好有6个字符”,但后来说“yyyy-989”是有效的。我是否遗漏了什么,或者这些是矛盾的?当询问有关正则表达式的问题时,最好指出目标语言/系统。Perl的RE引擎不同于JavaScript引擎,不同于Java引擎等。编辑器(或grep等工具)中的支持也可能有很大的不同。Charles Stewart添加了PCRE标记,但我不确定这是否是您想要/需要的。是的,我正在学习:)+1表示可选破折号,这确实没有正确指定
^[a-zA-Z0-9]{6}(?:-[a-zA-Z0-9]{0,4})?$