Bash regex gotcha

时间:2011-06-26 18:08:43

标签: regex bash

我有一个小问题我真的无法理解:

bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]\{1,\}\\.$ ]] ; then echo "OK" ; else echo "KO" ; fi

我认为这应该给我KO,它给了我好...... 我想匹配至少有1个字符并以点结尾的东西......

我终于注意到它适用于bash版本4.1.5而不适用于版本3.2.25

我该如何处理这个版本?

编辑:

我找到了一个有效的解决方法,但我不知道为什么我必须将转义点放在括号之间:

bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]{1,}[\.]$ ]] ; then echo "OK" ; else echo "KO" ; fi'

2 个答案:

答案 0 :(得分:3)

您没有逃脱点,因此它被用作通配符并匹配任何字符。将.替换为\.此外,使用{1,}代替+,因为它们是等效的。

答案 1 :(得分:1)

.在正则表达式中很常见(“匹配任何字符”)。将其转为\.