Regex, как распознать 2 или 3 слова (любого не пробела), разделенных пробелами

1

Я использую java и пытаюсь написать регулярное выражение, за исключением этого:

jkdsl;a asdfasdf asdfjkl;

и это

789u 13789u

но не этот

HJKs9

или это

hiop hiopwer rewk3 fheio2

Пока у меня это есть, но он не работает (я использовал онлайн-тестер регулярных выражений):

(\S+\s){2,3}

Я думаю:

  • \S+ означает больше одного пробела

  • \s означает пробел

  • (X) {2,3} означает 2-3 (включительно) последовательные вхождения X

Где я ошибся?

(Я поместил его в java как "(\\S+\\s){2,3}" как\является побегом)

Теги:

1 ответ

2
Лучший ответ

Для соответствия строкам, имеющим два или три слова.

^\S+(?:\s+\S+){1,2}$

Java regex будет,

^\\S+(?:\\s+\\S+){1,2}$

\S+ соответствует одному или нескольким непространственным символам. \S+ соответствует одному или нескольким символам пробела. {1,2} называемый квантором повторения, который повторяет предыдущий токен, который (?:\S+\S+) один или два раза. $ Утверждается, что мы находимся в конце строки.

ИЛИ

Используйте это, если ваш ввод содержит предыдущие или следующие пробелы.

"^\\s*\\S+(?:\\s+\\S+){1,2}\\s*$"

DEMO

  • 0
    Используйте это ^ *\S+(?:\s+\S+){1,2} *$ если перед строкой стоит пробел.
  • 0
    Что означает «?:»? (Я понимаю все остальное) [Я все равно обрезал струны]
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню