代码之家  ›  专栏  ›  技术社区  ›  Simon

正则表达式-仅匹配7个字符?

  •  5
  • Simon  · 技术社区  · 16 年前

    我正在尝试匹配一个sedol(正好7个字符:6个字母数字字符,后跟1个数字字符)

    我的雷杰克斯

    ([A-Z0-9]{6})[0-9]{1}

    匹配正确,但以有效匹配开头的大于7个字符的字符串也匹配(如果您明白我的意思:)。例如:

    B3kmJP4型

    匹配正确,但:

    B3kmJP4X型

    这不应该匹配。

    有人能告诉我如何避免这种情况吗?

    4 回复  |  直到 16 年前
        1
  •  6
  •   DVK    16 年前

    regex结尾的美元符号(称为锚)表示字符串的结尾:

    ^([A-Z0-9]{6})\d$

    我还在开头添加了“^”,表示字符串的开头,并阻止匹配xb3kmjp4 我还简化了原来的regex。

    另外,根据维基百科,第一个字符不使用元音。我不太确定这是规则还是惯例。

        2
  •  5
  •   codaddict    16 年前

    两者都要用 start 和 end anchors 这样地:

    ^([A-Z 0-9]{6})[0-9]{1}$
    

    这将匹配一个字符串, 6个字母数字+空格字符,后跟一个数字 . 如果将这样的字符串作为 后缀 或 前缀 一根更大的绳子。

    你也可以摆脱 {1} 因为 [0-9] 单独匹配一个数字。

    阿尔索 \d 表示一个数字。所以你可以缩短你的regex如下:

    ^([A-Z \d]{6})\d$
    
        3
  •  3
  •   Kibbee    16 年前

    你忘了regex在字符串中的任何地方都匹配。要修复它,请尝试此操作。

    ^([A-Z 0-9]{6})[0-9]{1}$
    

    ^表示匹配字符串的开头,$表示匹配字符串的结尾。

        4
  •  3
  •   Gabe    16 年前
     ^([A-Z\d]{6})\d$
    
    • 使用^作为字符串开头
    • $表示字符串结尾
    • 去掉多余的空间,注意到了
    • 用\d换出0-9
    • 删除1,因为这是多余的