采取模式
[UGLER]*
字符串 UUG 可以与之匹配吗?我的意思是,允许重复吗?
答案1
原则上是的,但是可能取决于您使用的正则表达式风格。至少,布雷,埃雷和聚合酶链式反应将全部匹配该字符串。表达式的[UGLER]*
意思是匹配 U、G、L、E 或 R 组中的 0 个或多个连续字符。
您可以轻松地针对不同的正则表达式类型进行测试:
布雷
$ echo UUG | grep '[UGLER]*' UUG
埃雷
$ echo UUG | grep -E '[UGLER]*' UUG
聚合酶链式反应
$ echo UUG | grep -P '[UGLER]*' UUG
当然,既然你正在寻找零或者更多,它也会匹配你可能意想不到的东西:
$echo "foobar" | grep '[UGLER]*'
foobar
如果您使用的正则表达式风格支持它,请使用+
代替*
.例如,使用 PCRE:
$echo -e "UUG\nfoobar" | grep -P '[UGLER]*'
UUG
foobar
$echo -e "UUG\nfoobar" | grep -P '[UGLER]+'
UUG
答案2
假设您的模式是 fileglob 模式而不是正则表达式,那么它会匹配名为“UUG”的文件名。该模式将匹配以 U、G、L、E 或 R 开头的任何文件。
你可以自己测试一下:
touch UUG
ls -l [UGLER]*
如果模式是正则表达式,那么它将匹配任何字符串,因为您要匹配零个或多个 [UGLER] 实例。如果您想匹配 1 个或多个而不是零个或多个,请使用+
而不是*