#ruby #regex
#ruby #регулярное выражение
Вопрос:
Как я могу написать регулярное выражение в Ruby 1.9.2, которое определит, соответствует ли строка этим критериям:
- Может включать только буквы, цифры и
-
символ - Не может быть пустой строкой, т. Е. не может иметь длину 0
- Должно содержать хотя бы одну букву
Комментарии:
1. Второй критерий избыточен (уже охвачен третьим).
Ответ №1:
/A[a-z0-9-]*[a-z][a-z0-9-]*z/i
Это выглядит так
- начало строки
- несколько (или ноль) букв, цифр и / или тире
- буква
- несколько (или ноль) букв, цифр и / или тире
- конец строки
Ответ №2:
Я полагаю, эти два помогут вам: /A[a-z0-9-]{1,}z/i
и /[a-z]{1,}/i
. Первое проверяет первые два правила, а второе проверяет последнее условие.
Ответ №3:
Нет регулярного выражения:
str.count("a-zA-Z") > 0 amp;amp; str.count("^a-zA-Z0-9-") == 0
Ответ №4:
Вы можете ознакомиться с этим руководством по использованию регулярных выражений в ruby. Что касается того, что вам нужно, вы можете использовать следующее:
^[A-Za-z0-9-] $
^
Даст команду механизму регулярных выражений начать сопоставление с самого начала строки.
[..]
Даст команду движку регулярных выражений сопоставить любой из содержащихся в них символов.
A-Z означает любую букву верхнего регистра, a-z означает любую букву нижнего регистра, а 0-9 означает любое число.
-
Проинструктирует механизм регулярных выражений соответствовать -
.
Используется перед ним, потому что -
в регулярном выражении является специальным символом, поэтому его нужно экранировать
$
Даст команду механизму регулярных выражений прекратить сопоставление в конце строки.
Инструктирует механизм регулярных выражений сопоставлять то, что содержится между квадратными скобками, один или несколько раз.
Вы также можете использовать i
флаг, чтобы сделать поиск нечувствительным к регистру, поэтому регулярное выражение может стать чем-то вроде этого:
^[a-z0-9-] /i$
Комментарии:
1. Согласно ruby-doc.org/core-1.9.3/Regexp.html ,
^
это начало строки, а не начало строки.