Мне немного сложно понять шаблон, который позволит вводить что угодно, если первый символ не является пробелом. я пробовал
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
Это работает
^[^\s].*
Первый кареток обозначает начало строки и второе отрицание.
Большинство регулярных выражений, соответствующих по умолчанию, для поиска в любом месте строки для шаблона. Поскольку вы особенно заинтересованы в начале строки, вы должны префикс всего регулярного выражения '^', чтобы привязать соответствие к началу ввода.
String pattern = "^[^\\s][a-zA-Z0-9\\W ]+";
Это может быть немного запутанным, поскольку ^
имеет совсем другое значение, когда оно появляется внутри квадратных скобок. Внутри скобок, как вы знаете, он сигнализирует о соответствии набора (т.е. всех символов, кроме) набора символов, перечисленных в скобках. Снаружи это просто якорь для начала строки.
В этом не-скобочном использовании это противоположность $
которая привязывает совпадение в конце строки, например /end$/
будет соответствовать "другу", но не "окончанию" - вы можете больше узнать об якорях по этому URL-адресу: http://www.regular-expressions.info/anchors.html
Поскольку вы не заботитесь обо всем остальном, вы можете просто использовать String.charAt(int)
с Character.isSpaceChar(char)
или String.codePointAt(int)
с Character.isSpaceChar(int)
.
Второй метод - это правильный способ обработки строки и кодовой строки Юникода в астральной плоскости, тогда как первый метод не работает, но может использоваться, когда ваш ввод имеет только символ из базовой многоязычной плоскости (BMP).
Код для второго метода:
boolean startWithSpace = Character.isSpaceChar(input.codePointAt(0));
Character.isSpaceChar
проверяет любой символ пробела в соответствии с Unicode. Не путать с Character.isWhitespace
, который проверяет пробельный символ в соответствии с Java.
string.charAt(0)==' '
? Зачем использовать регулярное выражение ?String pattern = "^\\S.*$"