Java 用于检查字母数字字符串的正则表达式无效
我正在尝试测试我的字符串是否包含字符(a-z)(a-z)和数字(0-9) 我希望打印出Foo,但我的正则表达式似乎有问题。有人能帮我吗Java 用于检查字母数字字符串的正则表达式无效,java,regex,Java,Regex,我正在尝试测试我的字符串是否包含字符(a-z)(a-z)和数字(0-9) 我希望打印出Foo,但我的正则表达式似乎有问题。有人能帮我吗 谢谢您的问题是foo.matches(“.[A-Z].”)将返回false,因为foo=“abc1”中没有大写字母您的问题是foo.matches(.[A-Z].*)将返回false,因为foo=“abc1”中没有大写字母 foo.matches(".*[0-9].*") && foo.matches(".*[A-Z].*") &&
谢谢您的问题是
foo.matches(“.[A-Z].”)
将返回false
,因为foo=“abc1”
中没有大写字母您的问题是foo.matches(.[A-Z].*)
将返回false
,因为foo=“abc1”
中没有大写字母
foo.matches(".*[0-9].*") && foo.matches(".*[A-Z].*") && foo.matches(".*[a-z].*")
到
改变
到
以下内容将识别一个正则表达式中的匹配项:
foo.matches(".*([0-9].*[a-zA-Z])|([a-zA-Z].*[0-9]).*")
以下内容将识别一个正则表达式中的匹配项:
foo.matches(".*([0-9].*[a-zA-Z])|([a-zA-Z].*[0-9]).*")
可以使用单个表达式而不是多个表达式,如下所示-
if (foo.matches("(?=.*[a-zA-Z])(?=.*[0-9]).*")) {
//...
这将确保
foo
至少包含一个字母(小写或大写)和至少一个数字。您可以使用一个表达式而不是多个表达式,如下所示-
if (foo.matches("(?=.*[a-zA-Z])(?=.*[0-9]).*")) {
//...
这将确保
foo
至少包含一个字母(小写或大写)和至少一个数字。请尝试以下正则表达式以获取字母数字
foo.matches("\\w.*")
或
对于字母数字,请尝试以下正则表达式
foo.matches("\\w.*")
或
你的
foo
不匹配foo.matches(.*[A-Z].*)
字符必须出现在数字之前吗?你的foo
不匹配foo.matches(.*[A-Z].*)
字符必须出现在数字之前吗?你不需要在[]之前和之后
因为表达式没有锚定在源字符串的开头或结尾。@Jason-是的,他确实需要它们匹配
匹配整个表达式,而不是子字符串。您不需要在[]
之前和之后使用。*,因为表达式没有锚定在源字符串的开头或结尾。@Jason-是的,他需要它们匹配
匹配整个表达式,而不是子字符串。不,它匹配在数字之前的任意位置有字母或在字母之前的任意位置有数字的字符串。我没有使用^或$,因此它没有锚定到源字符串的开头或结尾。为什么。*?(*)本身表示0或更多,不需要?@TejasPatel?意味着不情愿的抓住。在这种情况下,它不是必需的。我不清楚他只是想匹配a-z a-z 0-9
@hwnd阅读问题的第一行。“我试图测试我的字符串是否包含一个字符(a-z)(a-z)和一个数字(0-9)”否,它匹配的字符串在数字之前有一个字母,或在字母之前有一个数字。我没有使用^或$,因此它没有锚定到源字符串的开头或结尾。为什么。*?(*)本身表示0或更多,不需要?@TejasPatel?意味着不情愿的抓住。在这种情况下,它不是必需的。我不清楚他只是想匹配a-z a-z 0-9
@hwnd阅读问题的第一行。“我试图测试我的字符串是否包含一个字符(a-z)(a-z)和一个数字(0-9)”“这个表达式的性能如何?我怀疑它在大弦上运行得很慢。我们在说多大的弦?我不知道。这只是个问题。我见过类似的正则表达式遇到问题,当匹配的字符串只有十几个字符左右时。这将是一个有趣的测试。似乎是一个很好的在线工具的目的。您可以使用您选择的不同输入测试模式^(?=.[a-zA-Z])(?=.[0-9]).*$
,并查看结果。此表达式的性能如何?我怀疑它在大弦上运行得很慢。我们在说多大的弦?我不知道。这只是个问题。我见过类似的正则表达式遇到问题,当匹配的字符串只有十几个字符左右时。这将是一个有趣的测试。似乎是一个很好的在线工具的目的。您可以在那里使用您选择的不同输入测试模式^(?=.[a-zA-Z])(?=..[0-9]).$
,并查看结果。“…包含一个字符和一个数字…”“…包含一个字符和一个数字…”
foo.matches("\\w+");