代码之家  ›  专栏  ›  技术社区  ›  Pablo Fernandez

JAVA正则表达式中的'`'和'-'匹配

  •  6
  • Pablo Fernandez  · 技术社区  · 16 年前

    我把这个雷杰克斯放进去了 爪哇 与字母数字字符或波浪线(~)匹配的

    ^([a-z0-9])+|~$

    现在我还要加上字符 - _ 我尝试过几种组合,但都不起作用,例如:

    ^([a-zA-Z0-9_-])+|~$ ^([a-zA-Z0-9]|-|_)+|~$

    必须匹配的示例输入字符串:

    沃佐

    00000

    NCNW0ML14-

    DeoBooEu7

    7MYG4XQFZ-

    A8FT-Y6HDU ~

    有什么线索/建议吗?

    3 回复  |  直到 16 年前
        1
  •  7
  •   cletus    16 年前

    - 是方括号内的特殊字符。它表示一个范围。如果它不在正则表达式的两端,则需要通过将 \ 在它之前。

    有必要指出一条捷径: \w 等于 [0-9a-zA-Z_] 所以我认为这更易读:

    ^([\w-]+|~$
    
        2
  •  3
  •   danben    16 年前

    你需要逃离 - ,像 \- ,因为它是一个特殊字符(范围运算符)。 _ 可以。

    所以 ^([a-z0-9_\-])+|~$ .

    编辑 :上一个输入字符串将不匹配,因为您使用的正则表达式匹配一个字母数字字符字符串(加上 - γ )或者瓷砖(因为管道)。但并非两者兼而有之。如果要在末尾允许可选颚化符,请更改为:

    ^([a-z0-9_\-])+(~?)$

        3
  •  3
  •   Bill the Lizard    16 年前

    如果你把 - 首先,它不会被解释为范围指示器。

    ^([-a-zA-Z0-9_])+|~$
    

    这与您的所有示例匹配,最后一个示例除外,使用以下代码:

    String str = "A8ft-y6hDu ~";
    System.out.println("Result: " + str.matches("^([-a-zA-Z0-9_])+|~$"));
    

    最后一个例子不匹配,因为它不符合您的描述。regex将匹配字母数字、-、和或~字符的任何组合。