正则表达式不空白,不包含<



我尝试为一个字符串创建一个正则表达式,它不是空白的,不能包含"<"。我的问题是我做错了什么,谢谢。

"(\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]+

任何非"<&quot;字符,连续1次或多次

下面是测试它的示例:https://regex101.com/r/9ptt15/2

不过,你可以试着解决它没有一个正则表达式:

boolean isValid = s != null && !s.isEmpty() && s.indexOf(" ") == -1 && s.indexOf("<") == -1;

相关内容

最新更新