接受包含字母数字字符的字符串的修订模式用户输入

时间:2018-10-03 02:37:34

标签: bash shell

我是Shell脚本的新手,我正在尝试制作一个以以下模式接受用户输入的Shell脚本:alphabet.alphabet (没有数字,没有空格,没有大写字母,并且在字母之间严格地一个“。”。) 例如:abc.pqr 我尝试了以下代码

If [[ “$1” =~ ^[a-z\.\a-z]+$ ]]; then echo “matched” else “not matched” fi 

但是它接受“ .pqr”和“ abc”。模式也是如此。 我不知道我在做什么错。 谁能解释。 ^ ^

1 个答案:

答案 0 :(得分:1)

使用以下POSIX方括号表达式修改正则表达式以完成您要执行的操作。

regex='^[[:lower:]]{1,}\.[[:lower:]]{1,}$'

此外,您无需引用正则表达式运算符的L.H.S操作数,请按以下说明操作

[[ $1 =~ $regex ]]

还请注意不正确地使用了不正确的Unicode双引号,shell无法正确处理。应该是"

https://regex101.com/r/be72FB/1上查看正则表达式匹配项


您的正则表达式为何不匹配的问题有两个原因

  1. 不正确的2 nd 转义\,它完全放在错误的位置。只有.才需要转义,以避免被视为特殊字符。
  2. 在括号表达式中带有.后缀的+表示.可以在搜索字符串中出现任意次数,这是不正确的。