只要第一个字符不是空格,我就很难找到一个允许输入任何内容的模式。 我试过了
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
答案 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 检查空格字符。