Разрешить только некоторые символы с grep? - PullRequest
3 голосов
/ 27 февраля 2012

Я хотел бы проверить строку, поэтому она содержит только символы 0-9 a-z -.

Когда я делаю

regex='[-a-z0-9]*'
string='abcd!'
if [[ $string =~ $regex ]]
then 
    echo "valid"
else
    echo "not valid"
fi

, она выдает valid, где я и ожидалnot valid потому что $string содержит !.

Ответы [ 2 ]

4 голосов
/ 27 февраля 2012

попробуйте это: regex='^[-a-z0-9]*$'.Это заставит всю линию соответствовать этому классу.В противном случае верным будет только одно совпадение или совсем не совпадение (из-за *).^...$ говорит, что строка начинается и заканчивается без чего-либо, что не соответствует.

1 голос
/ 27 февраля 2012

Вам нужно будет добавить границы для этого регулярного выражения.

'[- a-z0-9] *' говорит: сопоставляйте эти символы 0 или более раз в любом месте строки.

Таким образом, добавление символов начала и конца строки в регулярное выражение сделает то, что вы ищете:

regex='^[-a-z0-9]*$'

Следующим шагом является ограничение количества вхождений символа «-» только один раз. Может ли пунктирная черта появляться в начале или в конце строки? Если нет, попробуйте:

regex='^[a-z0-9]*-?[a-z0-9]*$'

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...