Regex 需要正则表达式的帮助

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]{

我需要一个正则表达式,用于:

字符串为字母数字,前半部分正好有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]{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})?$