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

String pattern that prevents the first character being a 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 顺便说一句

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

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

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

在这种非括号用法中,它与 $ 相反,它将匹配锚定在字符串的 end 处,例如 /end$/ 将匹配 "friend" 但不匹配 "ending" - 您可以在 URL 阅读更多关于锚点的信息:http://www.regular-expressions.info/anchors.html

这个有用吗

^[^\s].*

第一个插入符号表示行首,第二个插入符号表示否定。

既然你不关心其余的,你可以直接使用String.charAt(int) with Character.isSpaceChar(char), or String.codePointAt(int) with Character.isSpaceChar(int)

第二种方法是在星界中处理Unicode字符串和代码点的正确方法,而第一种方法是错误的,但是当你的输入只有来自基本多语言位面(BMP)的字符时可用。

第二种方法的代码:

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

Character.isSpaceChar 根据 Unicode 检查任何空白字符 。不要与 Character.isWhitespace 混淆,它根据 Java.

检查空白字符