Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于验证用户id的Java正则表达式。_Java_Regex - Fatal编程技术网

用于验证用户id的Java正则表达式。

用于验证用户id的Java正则表达式。,java,regex,Java,Regex,我的正则表达式有点生锈了,我需要一些帮助。我正在编写一个正则表达式,用于验证java应用程序的用户id id必须满足的两个规则: 必须以a-、、0-9、a-z或a-z开头 不允许包含%、反斜杠、+、/、#、::、单引号或双引号 我遇到的问题是双冒号。id可以包含一个冒号,但不能背靠背包含一个冒号 这是我提出的,但似乎不起作用 ^[a-zA-Z0-9\-\\\([^%\+\\\/\\\\\\\\\\\''\'”)\^((!:))+$ 任何建议都很好。该(?!::)是一种消极的前瞻,只有当字符串开头

我的正则表达式有点生锈了,我需要一些帮助。我正在编写一个正则表达式,用于验证java应用程序的用户id

id必须满足的两个规则:

  • 必须以a-、、0-9、a-z或a-z开头
  • 不允许包含%、反斜杠、+、/、#、::、单引号或双引号
  • 我遇到的问题是双冒号。id可以包含一个冒号,但不能背靠背包含一个冒号

    这是我提出的,但似乎不起作用

    ^[a-zA-Z0-9\-\\\([^%\+\\\/\\\\\\\\\\\''\'”)\^((!:))+$

    任何建议都很好。

    (?!::)
    是一种消极的前瞻,只有当字符串开头有两个冒号时,匹配才会失败

    您可以在匹配第一个字符后立即使用
    (?!!*:)
    负前瞻:

    String rx = "^[a-zA-Z0-9_-](?!.*::)[^%+\\\\/#'\"]+$";
    
    matches()
    一起使用时,可以省略
    ^
    $
    锚定

    详细信息

    • ^
      -字符串开始(隐式在
      匹配()中)
    • [a-zA-Z0-9_-]
      -一个单词或
      -
      字符(因此,可以简化为
      [\w-]
    • (?!*:)
      -在任何0+字符(换行符除外)之后没有
    • [^%+\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    • $
      -字符串结尾(隐式在
      匹配()中)

    它似乎不起作用并不是一个问题陈述。您需要详细说明这到底意味着什么。它不能起作用,因为
    ^(?!:)
    只有在字符串的开头跟有
    ::
    时才会失败。在其他任何地方,它都不匹配。为了获得更好的性能,可以在有效字符之间使用
    组合项目符号3和项目符号4,不包括
    ,并检查单个
    ,例如
    (?:[^%+\\\\/\\\\\\\\\\\\''\':]+(?!:)
    )。这消除了由
    *
    @Andreas触发的回溯,我将展开它,然后消除由
    引起的冗余回溯。谢谢,这正是我所需要的!