Java正则表达式特殊字符,直到字符串结束
给定的字符串规则是
[Random Nr of Letters]##[Random Nr of Letters]#[Random Nr of Letters]##########
字符串长度必须为35
我的绳子看起来像
TEST##TESTING#TEST#################
我的问题是我无法检测出错误的格式,比如
TEST##TESTING#TEST##A##############
我的方法是:
private static boolean test(String test_line) {
String test = "[A-Z]{1,}##[A-Z]{1,}#[A-Z]{1,}#{1,}";
Pattern test_pattern = Pattern.compile(test);
Matcher matcher = test_pattern.matcher(test_line);
return matcher.find();
}
是否有一个简单的正则表达式方法(我必须使用它),比如“用#结束这个字符串,并且不允许使用其他字符”
另一个问题: 我如何确保我的测试不允许使用A-Z 0-9和#以外的其他字符?比如:
String test = "([^A-Z][^0-9][#])";
Pattern test_pattern = Pattern.compile(test);
Matcher matcher = test_pattern.matcher(test_line);
return matcher.find();
(与谈判)
谢谢你的帮助:)
# 1 楼答案
对于指定的格式,确保最后一个字符为
#
:要测试字符串的长度,请执行以下操作:
要测试并允许数字(仅字母数字和
#
符号):要同时允许小写字母,请执行以下操作:
# 2 楼答案
试试这个
或
或
Demo
# 3 楼答案
让我们一步一步来:
为了确保某些字符串具有特定的长度,正则表达式可以如下所示
在哪里
^
表示字符串的开头.
表示任何字符(除行分隔符外){35}
表示前一个元素(在本例中为.
-任何字符)可以出现的次数,因此这里regex需要35个字符$
表示字符串的结尾在您的例子中,您希望只接受范围为}替换
A-Z
和#
的字符,这样您就可以用这个character-class{.
(任何字符),这样您的正则表达式看起来就像但您还需要确保这些字符的顺序。换句话说,您还需要检查整个字符串是否与其他正则表达式匹配
实际上,我们可以简单地使用
+
来代替{1,}
,这将给我们要组合这两个正则表达式,您可以使用look-ahead机制,让我们查看使用它的位置之后的字符,并检查它之后的字符是否与其他正则表达式匹配
所以最后的正则表达式看起来像
现在,为了避免每次调用方法时重新编译(
Pattern.compile(test)
)相同的正则表达式,最好将其编译后的版本存储在方法之外的类字段中。所以试试类似的东西试验
# 4 楼答案
下面的正则表达式将匹配满足上述标准的行
DEMO
它与正好包含35个字符的行匹配