常用的正则表达式有多种方言。Bash支持的是扩展正则表达式的变体。这与许多在线正则表达式测试人员支持的不同,后者通常是更现代的Perl 5 / PCRE变体。

  • 不支持\d \D \s \S \w \W-这些可以与POSIX字符类等同替换[[:digit:]][^[:digit:]][[:space:]][^[:space:]][_[:alnum:]],和[^_[:alnum:]],分别。(注意最后一种情况,其中[:alnum:]POSIX字符类用下划线扩充,以完全等同于Perl \w速记。)
  • Bash不支持非贪婪匹配。你有时可以a.*?b用类似的东西代替a[^ab]*b在实践中获得类似的效果,尽管两者并不完全相同。
  • Bash不支持非捕获括号(?:...)。在简单的情况下,只需使用捕获括号(...); 当然,如果您使用捕获组和/或反向引用,这将重新编号您的捕获组。
  • Bash不支持类似的外观(?<=before)(?!after)实际上任何东西(?都是Perl扩展。虽然您可以将问题重新划分为可以避免外观的问题,但这些问题并没有简单的一般解决方法

 

常见的替换:

\s   ==>  \ (空格转义) 或 [[:space:]]

\d  ==> [0-9] 或 [[:digit:]]

 

有些bash环境下(没有细究),正则表达式中的"\s"是支持的(例如grep的参数),或者将正则表达式定义为变量使用时支持(例如if [[ $test =~ $regex ]] $regex变量支持"\s",直接在 =~ 的右边写正则表达式时不支持"\s")。

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐