我有一个特殊的正则表达式,在大约15-20天后失败。我使用的正则表达式是:
^[^-\\s][a-zA-Z0-9 ]*[[a-zA-Z0-9 !_|,ÄÖÜäöü߀:;\'~`\\?$%^*{}()=/@./#&><+-]+.*\\r\\n]+$
条件是:仅允许第一个单词中的数字和字母。任何事情都可以遵循。它不仅仅是空间。也允许使用德语字符。允许所有特殊字符。
我在日志中收到以下错误:
Stack trace: java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
java.util.regex.Pattern$Curly.match(Pattern.java:4132)
java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
java.util.regex.Pattern$Curly.match(Pattern.java:4132)
java.util.regex.Pattern$Pos.match(Pattern.java:4965)
java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
java.util.regex.Pattern$Curly.match(Pattern.java:4132)
java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
java.util.regex.Pattern$Curly.match(Pattern.java:4132)
java.util.regex.Pattern$Begin.match(Pattern.java:3472)
java.util.regex.Matcher.match(Matcher.java:1221)
java.util.regex.Matcher.matches(Matcher.java:559)
java.util.regex.Pattern.matches(Pattern.java:1130)
答案 0 :(得分:0)
您的正则表达式可以简化为(?ums)^[a-zA-Z0-9]+ [^ ]+$
说明:
[a-zA-Z0-9]+
- &gt;以符号开头:a-zA-Z0-9
- 空格作为单词之间的分隔符[^ ]+
- 除空格外的任何符号标志:
u
- 允许unicode符号m
- 多行s
- dotall模式(匹配任何字符,包括行终止符)试验:
public void testRegExp() {
String regex = "(?ums)^[a-zA-Z0-9]+ [^ ]+$";
Assert.assertTrue("iuy98 ÄÖ\r\nÜäöüß7".matches(regex));
Assert.assertTrue("iuy 98ÄÖÜäöüß7*&^&%*$&".matches(regex));
Assert.assertFalse("iuy98Ä ÖÜäöü\r\nß7*&^&%*$&".matches(regex));
Assert.assertFalse("i u y98ÄÖÜäöüß7*&^&%*$&".matches(regex));
Assert.assertFalse(" iuy98ÄÖÜäöüß7*&^&%*$&\r\n".matches(regex));
Assert.assertFalse("00uy98ÄÖÜä öüß7*&^&%*$&".matches(regex));
Assert.assertFalse("00uy98ÄÖÜä öüß7*&^&%*$&".matches(regex));
Assert.assertFalse("$%^&00uy98ÄÖÜä öüß7*&^&%*$&".matches(regex));
Assert.assertTrue("00uy98 ÄÖÜ____äöüß\r\n7*&^&%*$&".matches(regex));
Assert.assertTrue("00uy98 ÄÖÜ____äöüß\r\n7*&^&%*$&".matches(regex));
Assert.assertTrue("00 uy98{}[]ÄÖÜ____äöüß\r\n7*&^&%*$&".matches(regex));
}
答案 1 :(得分:0)
仅允许第一个单词中的数字和字母。任何事情都可以遵循。它不仅仅是空格。
这个应该做的工作:
^[a-zA-z0-9]+\\S+$
\S
代表任何非空格字符。