我正在尝试用Java创建一个正则表达式,它不匹配单词之间过多的空格,以及开头和结尾的空格。
到目前为止我已经完成了这个正则表达式
^[\\S].*[\\S]$
当行的开头和结尾有空格时失败
但是如何在单词之间产生过多的空格?
我希望这一行失败:
"test test"
但不是这样:
"test test"
我试过了:
^[\\S].*(?![\\s]{2,}).*[\\S]$
但它不起作用。
答案 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++)*+$"
首先是非零空格的非零空格,然后是单个空格的多个(可能为零)重复,后跟多个(非零)非空格。
您可以使用(同样的结果)普通++
和*+
运算符代替非回溯+
和*
运算符;请注意,如果字符串很长(几千字节),非回溯运算符的性能会好很多。