Я ищу регулярное выражение для соответствия, которое не содержит пробела промежуточный текст, но это может или не может иметь пробела в запуске или конце текста.
Вам нужно что-то вроде этого: (увидеть это в действии на rubular. com):
^\s*\S+\s*$
Explanation:
^
- начало строки$
- конец строки\s
- класс символов для пробельных символов\S
- отрицание \s
(обратите внимание на разницу в верхнем и нижнем регистре)*
- повторение "zero- или больше" повторение+
- "один или больше" повторениеПриведенный выше шаблон НЕ соответствует, скажем, пустой строке. В оригинальной спецификации не совсем ясно, является ли это предполагаемым поведением, но если пустой "текст" разрешен, то просто используйте \S*
вместо него, т.е. сопоставьте ноль-или-больше (вместо один-или-больше) повторений \S
.
Таким образом, этот шаблон (как и выше, только вместо *
используется +
)
^\s*\S*\s*$
будет соответствовать:
В приведенных выше шаблонах используется \S
для определения символов "текста", т.е. всего, кроме пробельных символов. Это включает такие вещи, как пунктуация и символы, т.е. строка " #@^$^* "
соответствует обоим шаблонам. Неясно, является ли это желаемым поведением, т.е. возможно, что " ==== AWESOMENESS ==== "
является желаемым совпадением
Шаблон по-прежнему работает даже в этом случае, нам просто нужно быть более конкретными с нашими определениями классов символов.
Например, этот шаблон:
/^[^a-z]*[a-z]*[^a-z]*$/i
Будет соответствовать (as seen on rubular.com):
==== AWESOMENESS ====
Но не:
==== NOT AWESOME ====
Обратите внимание, что метасимвол ^
, когда он используется как первый символ в определении класса символов, больше не означает начало якоря строки, а скорее отрицание определения класса символов.
Обратите внимание также на использование модификатора /i
в шаблоне: это позволяет выполнять сопоставление без учета регистра. Фактический синтаксис может различаться в разных языках.
java.util.regex.Pattern.CASE_INSENSITIVE
-- встроенный флаг (?i)
Только что нашел ответ. Я пишу это здесь, чтобы это могло быть полезно для кого-то еще.
^ \ s * \ S * \ s * $
Это должно сработать:
^\s*\S+\s*$
"aaadadadad"
=> соответствует "aaa aaaaa"
=> не соответствует