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

时间:2015-06-09 16:36:38

标签: java regex regex-negation

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

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

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

当行的开头和结尾有空格时失败

但是如何在单词之间产生过多的空格?

我希望这一行失败:

"test    test"

但不是这样:

"test test"

我试过了:

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

但它不起作用。

4 个答案:

答案 0 :(得分:0)

对于失败案例,请检查:

\s{2,}

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

阅读此答案后https://stackoverflow.com/a/1240365/2136936

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

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

我不明白的一点是,为什么它不会这样做:^[\\S].*(?!\\s{2,}).*[\\S]$

答案 3 :(得分:0)

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

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

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

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