正则表达式在单词之间有过多空格时失败

Regex that fail when there excessive whitespaces between words

我正在尝试在 Java 中制作一个正则表达式,它不匹配单词之间过多的空格以及开头和结尾的空格。

到目前为止我已经完成了这个正则表达式

^[\S].*[\S]$

行首和行尾有空格时失败

但是单词之间的空格过多怎么办?

我希望这一行失败:

"test    test"

但不是这个:

"test test"

我试过这个:

^[\S].*(?![\s]{2,}).*[\S]$

但是没有用。

对于失败案例,只需检查:

\s{2,}

即空格 2 次或更多次。如果匹配则验证失败。

这应该检查前后两个以上的空格

[^\s]([ ]{2,})[^\s]

看完这个回答

我想出了以下正则表达式,这正是我想要的:

^[\S](?!.*\s{2,}).*[\S]$

有一件事我不明白,为什么它不能这样工作:^[\S].*(?!\s{2,}).*[\S]$

您可以使用以下正则表达式(假设您不想匹配空字符串):

"^\S++(\s\S++)*+$"

首先是非零数量的非空白,然后是单个空白的多个(可能为零)重复,然后是多个(非零)非空白。

除了非回溯 ++*+ 运算符,您还可以使用(结果相同)普通的 +* 运算符;请注意,如果字符串很长(几千字节),非回溯运算符的性能会好很多。