java - 匹配这些规则的正则表达式模式

标签 java regex

我需要一个正则表达式来匹配以下规则。

1. Atleast 1 numerical character.
2. Atleast 1 of these (!, @, #, $, %, _) non-alphanumeric characters. 
3. Uppercase alphabets.
4. Lowercase alphabets

我尝试创建一个如下所示的模式,但问题是任何字符都可以位于任何位置。我有点被困在这里。

^[[A-Z]+[a-z]+[0-9]+[!@#\\$%_]+]$

这些应满足上述每个条件。

1. [0-9]+
2. [!@#\\$_%]+
3. [A-Z]+
4. [a-z]+

但我如何将它们组合在一起,以便它们可以以任何顺序出现,但每个组至少出现一次。

解决方案:

 ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#$%_])[A-Za-z0-9!@#$%_]*$

最佳答案

您需要使用 positive lookahead assertions分别独立地检查每个条件:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%_]).*$

将匹配至少包含其中每个字符之一的任何字符串(但也可能包含其他字符)。

前瞻实际上并不参与匹配(这就是为什么你可以将它们一个接一个地放置 - 它们都锚定在字符串的开头),但它们会查看其中包含的正则表达式可以 在当前位置匹配。

解释:

^              # Start of string.
(?=            # Look ahead to see if it's possible to match...
 .*            # any string
 [A-Z]         # followed by one uppercase ASCII letter.
)              # End of lookahead.
(?=.*[a-z])    # Same for lowercase ASCII letter
(?=.*[0-9])    # Same for ASCII digit
(?=.*[!@#$%_]) # Same for this list of "special" characters
.*             # Now match any string.
$              # End of string.

关于java - 匹配这些规则的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095989/

相关文章:

java - 如何获取当前文件当前行的Git提交信息

java - 在 Android 中的 JUnit 测试用例中创建文件

java - ACL 主体与 GrantedAuthority 概念

android - 获取android中html的所有元素和值

MySQL:使用正则表达式进行批量替换?

java - 在java中将String转换为double。更改打印 double 格式

java - 正确删除三元搜索树中的节点

python - 如何将 pandas 数据框列映射到需要多个参数的函数

Java 正则表达式 : matching comments and NOT matching specific character

Notepad++ 背后的正则表达式正面