Какое регулярное выражение для сопоставления не содержит пробелов между текстом?

Я ищу регулярное выражение для сопоставления, которое не содержит пробелов между текстом, но может иметь или не иметь пробел в начале или конце текста.

3 ответа

Решение

Вы хотите что-то вроде этого: ( увидеть это в действии на rubular.com):

^\s*\S+\s*$

Объяснение:

  • ^ это начало якоря строки
  • $ конец якоря строки
  • \s класс символов для пробела
  • \S это отрицание \s (обратите внимание на разницу в верхнем и нижнем регистре)
  • * это повторение "ноль или больше"
  • + повторение "один или более"

Рекомендации


Может ли текстовая часть быть пустой?

Приведенный выше шаблон НЕ соответствует, скажем, пустой строке. Исходная спецификация не очень ясна, если это предполагаемое поведение, но если разрешен пустой "текст", тогда просто используйте \S* вместо того, чтобы соответствовать нулю- или-более (вместо одного- или-более) повторения \S,

Таким образом, этот шаблон (так же, как указано выше, за исключением * используется вместо +)

^\s*\S*\s*$

будет соответствовать:

  • Пустая строка (т.е. строка, длина которой равна 0)
  • Непустые строки, состоящие только из пробельных символов

Что считается "текстовыми" символами?

Вышеуказанные шаблоны использования \S определить "текстовые" символы, то есть все, кроме пробелов. Это включает в себя такие вещи, как знаки препинания и символы, то есть строка " #@^$^* " соответствует обе модели. Не ясно, является ли это желаемым поведением, то есть возможно, что " ==== AWESOMENESS ==== " желаемое совпадение

Шаблон все еще работает даже для этого случая, нам просто нужно быть более конкретным с нашими определениями классов символов.

Например, этот шаблон:

/^[^a-z]*[a-z]*[^a-z]*$/i

Будет соответствовать ( как видно на rubular.com):

 ==== AWESOMENESS ====

Но нет:

 ==== NOT AWESOME ==== 

Обратите внимание, что ^ Метасимвол, когда он используется в качестве первого символа в определении класса символов, больше не означает начало привязки строки, а скорее отрицание определения класса символов.

Обратите внимание также на использование /i модификатор в шаблоне: это позволяет сопоставление без учета регистра. Фактический синтаксис может варьироваться в зависимости от языка / вкуса.

Рекомендации

Просто нашел ответ сам. Поэтому я пишу это здесь, чтобы это могло быть полезно для кого-то еще.
^\s*\S*\s*$

Это должно сделать это:

^\s*\S+\s*$
  • " aaadadadad " => соответствует
  • " aaa aaaaa " => не соответствует
Другие вопросы по тегам