Вы хотите что-то вроде этого: ( видеть его в действии на rubular.com ):
^\s*\S+\s*$
Объяснение:
^
является началом привязки строки $
является концом привязки строки \s
является символьным классом для пробелов \S
является отрицанием \s
(обратите внимание на разницу в верхнем и нижнем регистре) *
является повторением «нуль или больше» +
является «одним Вышеупомянутый шаблон NOT , например, пустая строка. Исходная спецификация не очень ясна, если это предполагаемое поведение, но если пустым «текстом» разрешено, просто используйте вместо него \S*
, т. Е. Сопоставьте ноль -или-больше (вместо one -or-more) повторение \S
.
Таким образом, этот шаблон (такой же, как выше, кроме *
используется вместо +
)
^\s*\S*\s*$
будет соответствовать:
Вышеупомянутые шаблоны используют \S
для определения символов «текст», т.е. ничего, кроме пробелов. Это включает в себя такие вещи, как пунктуации и символы, т. Е. Строка " #@^$^* "
соответствует обоим шаблонам. Неясно, является ли это желаемым поведением, т. Е. Возможно, что " ==== AWESOMENESS ==== "
является желаемым совпадением
. Шаблон все еще работает даже для этого случая, нам просто нужно быть более конкретным с нашими определениями класса символов.
Например, этот шаблон:
/^[^a-z]*[a-z]*[^a-z]*$/i
Будет соответствовать (, как показано на rubular.com ):
==== AWESOMENESS ====
Но не:
==== NOT AWESOME ====
Обратите внимание, что метасимвол ^
, используемый в качестве символа первого в определении класса символов, больше не означает начало строкового якоря , а скорее отрицание определения класса символов.
Обратите также внимание на использование модификатора /i
в шаблоне: это позволяет не учитывать регистр символов. Фактический синтаксис может варьироваться между языками / ароматами.
java.util.regex.Pattern.CASE_INSENSITIVE
- встроенный флаг (?i)