Подтвердить что ты не робот

Почему этот тест регулярного выражения не работает?

У меня есть это

echo $line
Thisisaline.

Мне было интересно, почему это не работает:

if [[ "$line" =~ "[a-zA-Z]+\.$" ]] ; then echo "hello"; fi

Выше регулярное выражение не выводит.

4b9b3361

Ответ 1

Проблема в том, что вы используете кавычки...

В bash regex нет необходимости в кавычках, и они не должны использоваться (если вы не пытаетесь сопоставить цитату (в этом случае вы можете избежать ее \")... Также if вам нужно пространство в вашем шаблоне, вы должны избежать его, (после обратного слэша есть пробел...

Также обратите внимание, что для соответствия всей строки как алфавита вы должны добавить ведущий ^ и конечный $, в противном случае он будет соответствовать таким строкам, как: 123 456 abc. cat and mouse

Ответ 2

Try

if [[ $line =~ [a-zA-Z]+\. ]] ; then echo hello; fi

Ответ 3

Некоторая версия ОС с bash дает вам результат. Таким образом, вы можете получить свои обновления. Тем не менее, без регулярного выражения вы можете использовать расширенное globbing

shopt -s extglob
case "$line" in
+([a-zA-Z]). ) echo "hello";;
esac

Если нет, используйте regex без кавычек