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

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

6
задан Tasawer Khan 11 June 2010 в 06:57
поделиться

3 ответа

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

^\s*\S+\s*$

Explanation:

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

Ссылки


Может ли часть "text" быть пустой?

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

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

^\s*\S*\s*$

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

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

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

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

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

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

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

Будет соответствовать (as seen on rubular.com):

 ==== AWESOMENESS ====

Но не:

 ==== NOT AWESOME ==== 

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

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

Ссылки

15
ответ дан 8 December 2019 в 12:57
поделиться

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

2
ответ дан 8 December 2019 в 12:57
поделиться

Это должно сработать:

^\s*\S+\s*$
  • "aaadadadad" => соответствует
  • "aaa aaaaa" => не соответствует
1
ответ дан 8 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: