模式重复和正则表达式

模式重复和正则表达式

采取模式

[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 个或多个而不是零个或多个,请使用+而不是*

相关内容