鉴于字符串的规则是
[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();
}
使用RegEx是否有一个简单的方法(我必须使用它),例如"用#结束此字符串并且不要允许其他字符"。
另一个问题: 我怎样才能确保我的测试不会允许其他字符而不是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();
(通过谈判)
感谢您的帮助:)
答案 0 :(得分:2)
让我们一步一步地做:
为了确保某些字符串具有特定长度,正则表达式可能看起来像
^.{35}$
其中
^
表示字符串的开头.
表示任何字符(在行分隔符旁边){35}
表示前一个元素(不包括.
- 任何字符)可以出现的次数,因此此处正则表达式需要35个字符$
表示字符串结尾在您的情况下,您只想接受A-Z
和#
范围内的字符,因此您可以使用character-class .
替换[A-Z#]
(任何字符)所以你的正则表达式看起来像
^[A-Z#]{35}$
但您也想确保这些角色的顺序。换句话说,您还想检查整个字符串是否与其他正则表达式匹配
^[A-Z]{1,}##[A-Z]{1,}#[A-Z]{1,}#{1,}$
实际上我们可以简单地使用{1,}
来代替+
^[A-Z]+##[A-Z]+#[A-Z]+#+$
要合并这两个正则表达式,您可以使用look-ahead机制,让我们在使用它的位置之后查看字符,并检查它后面的字符是否与其他正则表达式匹配。
所以最终的正则表达式看起来像
^(?=[A-Z#]{35}$)[A-Z]+##[A-Z]+#[A-Z]+#+$
----------- ------------------------
regex1 (length) regex2 (order)
现在为了避免每次调用方法时重新编译(Pattern.compile(test)
)相同的正则表达式,最好将其编译后的版本作为类字段存储在方法之外。所以尝试类似
private static Pattern test_pattern = Pattern
.compile("^(?=[A-Z#]{35}$)[A-Z]+##[A-Z]+#[A-Z]+#+$");
private static boolean test(String test_line) {
return test_pattern.matcher(test_line).matches();
}
测试
System.out.println(test("TEST##TESTING#TEST#################"));//true
System.out.println(test("TEST##TESTING#TEST##A##############"));//false
答案 1 :(得分:1)
试试这个
[a-zA-Z]+#{2}[a-zA-Z]+#{1}[a-zA-Z]+#{1,}
或者
^([a-zA-Z]+#{2}[a-zA-Z]+#{1}[a-zA-Z]+#{1,})$
或
^(?=.{35}$)([A-Z]+#{2}[A-Z]+#{1}[A-Z]+#{1,})$
TEST##TESTING#TEST################# // pass
TEST##TESTING#TEST##A############## // fail
答案 2 :(得分:1)
答案 3 :(得分:0)
对于指定的格式,确保最后一个字符为#
:
([A-Z]+[#]+){3}
测试字符串的长度:
if(test.length == 35)
// ...
测试并允许数字(仅限字母数字和#
符号):
([A-Z0-9]+[#]+){3}
允许使用小写字母:
(\w+#+){3}