моя действительная строка должна быть либо "1234" or " 1234"
разрешить one or zero space
в начале
затем следует только любое количество digits
так что должно быть регулярным выражением для этого?
Вы можете использовать это:
^ ?\d+$
который легче читать следующим образом:
^[ ]?\d+$
См. Демонстрацию.
Чтобы проверить, есть ли у вас совпадение, вы можете сделать (например):
if (subjectString.matches("[ ]?\\d+")) {
// It matched!
}
else { // nah, it didn't match... }
Здесь вам не нужны привязки ^
и $
, потому что метод matches
ищет точное совпадение.
объяснение
^
утверждает, что мы находимся в начале строки. В зависимости от используемого метода эти якоря могут не понадобиться.[ ]?
соответствует нулю или одному пробелу. Скобки не нужны, но они облегчают чтение. Вы можете удалить их. Не используйте \s
там, поскольку он также соответствует символам новой строки и вкладкам.\d+
соответствует одной или нескольким цифрам$
Anchor утверждает, что мы находимся в конце строки\d
=> Соответствует одному символу, который является «цифрой» (только ASCII 0–9). Ссылка на символ Unicode, на которую вы ссылались, была из вопроса C #. :)
Это должно быть \\s?\\d+
System.out.println(Pattern.matches("\\s?\\d+", "1234")); // true
System.out.println(Pattern.matches("\\s?\\d+", " 1234")); // true
System.out.println(Pattern.matches("\\s?\\d+", " 1234")); // false
\s
обозначает пробелы и ?
означает нуль или одно появление. \d
соответствует цифре с +
значением по крайней мере одного появления.
Если разрешен только пробельный символ (например, нет вкладок), используйте ( )?\\d+
Если ваши входные данные должны быть только одним пробелом (а не пробелом), значит, вам нужно регулярное выражение ?\d+
(обратите внимание на пробел перед "?").
С другой стороны, если ваши входные данные должны содержать пробелы, вам нужно настроить регулярное выражение так:
\s?\d+
Символом пробелов может быть:
A space character
A tab character
A carriage return character
A new line character
A vertical tab character
A form feed character
В качестве примечания, если вам нужно отбросить всех символов после ваших цифр, для instace 1234fff
не нужно сопоставлять, то вы можете исправить свое регулярное выражение: \s?\d+\b
(это сделает ваше регулярное выражение иметь границу).
Не забудьте избежать обратных косых черт в java-коде, поэтому \s?\d+
будет \\s?\\d+
Ниже вы можете найти регулярное выражение для одного пробела, за которым следуют только цифры.
Ваше регулярное выражение будет,
^\s?[0-9]+$
Объяснение:
^
Утверждается, что мы находимся в начале линии.\s?
Разрешено ноль или одно пространство.[0-9]+
Один или несколько номеров.$
Утверждается, что мы находимся в конце строки.\s
все еще проблема, потому что она может соответствовать новым строкам, вертикальным вкладкам, вкладкам и т. Д.