正则表达式在单词之间有过多空格时失败
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++)*+$"
首先是非零数量的非空白,然后是单个空白的多个(可能为零)重复,然后是多个(非零)非空白。
除了非回溯 ++
和 *+
运算符,您还可以使用(结果相同)普通的 +
和 *
运算符;请注意,如果字符串很长(几千字节),非回溯运算符的性能会好很多。
我正在尝试在 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++)*+$"
首先是非零数量的非空白,然后是单个空白的多个(可能为零)重复,然后是多个(非零)非空白。
除了非回溯 ++
和 *+
运算符,您还可以使用(结果相同)普通的 +
和 *
运算符;请注意,如果字符串很长(几千字节),非回溯运算符的性能会好很多。