用于验证用户id的Java正则表达式。
我的正则表达式有点生锈了,我需要一些帮助。我正在编写一个正则表达式,用于验证java应用程序的用户id id必须满足的两个规则:用于验证用户id的Java正则表达式。,java,regex,Java,Regex,我的正则表达式有点生锈了,我需要一些帮助。我正在编写一个正则表达式,用于验证java应用程序的用户id id必须满足的两个规则: 必须以a-、、0-9、a-z或a-z开头 不允许包含%、反斜杠、+、/、#、::、单引号或双引号 我遇到的问题是双冒号。id可以包含一个冒号,但不能背靠背包含一个冒号 这是我提出的,但似乎不起作用 ^[a-zA-Z0-9\-\\\([^%\+\\\/\\\\\\\\\\\''\'”)\^((!:))+$ 任何建议都很好。该(?!::)是一种消极的前瞻,只有当字符串开头
^[a-zA-Z0-9\-\\\([^%\+\\\/\\\\\\\\\\\''\'”)\^((!:))+$
任何建议都很好。该(?!::)
是一种消极的前瞻,只有当字符串开头有两个冒号时,匹配才会失败
您可以在匹配第一个字符后立即使用(?!!*:)
负前瞻:
String rx = "^[a-zA-Z0-9_-](?!.*::)[^%+\\\\/#'\"]+$";
与matches()
一起使用时,可以省略^
和$
锚定
见
详细信息
-字符串开始(隐式在^
匹配()中)
-一个单词或[a-zA-Z0-9_-]
字符(因此,可以简化为-
)[\w-]
-在任何0+字符(换行符除外)之后没有(?!*:)
:
[^%+\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
-字符串结尾(隐式在$
匹配()中)
^(?!:)
只有在字符串的开头跟有::
时才会失败。在其他任何地方,它都不匹配。为了获得更好的性能,可以在有效字符之间使用
组合项目符号3和项目符号4,不包括:
,并检查单个:
,例如(?:[^%+\\\\/\\\\\\\\\\\\''\':]+(?!:)
)。这消除了由*
@Andreas触发的回溯,我将展开它,然后消除由
引起的冗余回溯。谢谢,这正是我所需要的!