我尝试为一个字符串创建一个正则表达式,它不是空白的,不能包含"<"。我的问题是我做错了什么,谢谢。
"(\A(?!\s*\Z))|([^<]+)"
编辑也许这样就可以组合这个正则表达式
^[^<]+$
使用这个正则表达式
\A(?!\s*\Z).+
使用regex,您可以使用
A(?!s+z)[^<]+z
(?U)A(?!s+z)[^<]+z
(?U)
仅在您期望在输入中使用Unicode字符时才需要。
在Java中,当与matches
一起使用时,两端的锚点是隐式的:
text.matches("(?U)(?!\s+\z)[^<]+")
matches
中的regex执行一次,需要完整的字符串匹配。这里,它匹配
A
-(隐式在matches
中)-字符串 的开始(?U)
-启用Pattern.UNICODE_CHARACTER_CLASS
选项,以便s
可以匹配任何Unicode空白(?!\s+\z)
-直到字符串的最后,不应该有一个或多个空格[^<]+
-<
以外的一个或多个字符z
-(隐式在matches
中)-字符串结束。
查看Java测试:
String texts[] = {"Abc <<", " ", "", "abc 123"};
Pattern p = Pattern.compile("(?U)(?!\s+\z)[^<]+");
for(String text : texts)
{
Matcher m = p.matcher(text);
System.out.println("'" + text + "' => " + m.matches());
}
输出:
'Abc <<' => false
' ' => false
'' => false
'abc 123' => true
查看在线正则表达式测试(修改以适应单个多行字符串演示环境,以免跨越行边界)
你可以尝试使用这个正则表达式:
[^<s]+
任何非"<"字符,连续1次或多次
下面是测试它的示例:https://regex101.com/r/9ptt15/2不过,你可以试着解决它没有一个正则表达式:
boolean isValid = s != null && !s.isEmpty() && s.indexOf(" ") == -1 && s.indexOf("<") == -1;