阻止第一个字符为空格的字符串模式

时间:2015-02-11 18:42:08

标签: java regex string whitespace

只要第一个字符不是空格,我就很难找到一个允许输入任何内容的模式。 我试过了

String pattern = "[^\\s][a-zA-Z0-9\\W ]+";"

"([a-zA-Z0-9\\W]+)|(([a-zA-Z0-9\\W]+\\s[a-zA-Z0-9\\W]+)+)"以及其他几个变体,但没有成功。任何帮助将不胜感激。

我正在使用Java btw

3 个答案:

答案 0 :(得分:2)

大多数正则表达式匹配默认为在字符串中的任何位置搜索模式。由于您特别关注字符串的开头,因此您应该在整个正则表达式前加上' ^'将匹配锚定到输入的开头。

String pattern = "^[^\\s][a-zA-Z0-9\\W ]+";

由于^出现在方括号内时具有非常不同的含义,因此可能有点令人困惑。如您所知,在括号内部,它表示与括号中列出的字符集的补码(即除了所有字符之外)相匹配。在外面,它只是字符串开头的锚点。

在这个非括号内使用中,它与$相反,它将匹配固定在字符串的 end 上,例如/end$/将匹配"朋友"但不是"结束" - 您可以通过以下网址了解有关锚点的更多信息:http://www.regular-expressions.info/anchors.html

答案 1 :(得分:2)

这是否有效

^[^\s].*

第一个插入符号表示行开头,第二个插入符号表示。

答案 2 :(得分:0)

由于您不关心其余部分,因此您可以String.charAt(int)使用Character.isSpaceChar(char),使用String.codePointAt(int) Character.isSpaceChar(int)。< / p>

第二种方法是处理星体平面中的Unicode字符串和代码点的正确方法,而第一种方法是破坏的,但是当您的输入只有基本多语言平面(BMP)中的字符时可用。

第二种方法的代码:

boolean startWithSpace = Character.isSpaceChar(input.codePointAt(0));

Character.isSpaceChar根据Unicode 检查任何空格字符。不要与Character.isWhitespace混淆,{{1}}根据Java 检查空格字符