3 回答
TA贡献1844条经验 获得超8个赞
因为这是一个常见的常见问题解答,所以让我列出一些Bash不支持的结构,以及如何解决它们,这里有一个简单的解决方法。
正则表达式有多种常用方言。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不支持非括号
(?:...)
。在平凡的情况下,只需使用捕获括号即可(...)
;当然,如果您使用捕获组和/或反向引用,则会重新编号捕获组。击不支持lookarounds像
(?<=before)
或者(?!after)
,事实上任何与(?
是一个Perl扩展。尽管您经常可以将问题改写为可以避免环顾的问题,但没有简单的常规解决方法。
TA贡献1890条经验 获得超9个赞
从 man bash
可以使用附加的二进制运算符=〜,其优先级与==和!=相同。使用它时,运算符右边的字符串将被视为 扩展的正则表达式并进行相应的匹配(如regex(3)中一样)。
ERE不支持先行/后退。但是,您的代码((?!Disk))中有它们。
这就是为什么您的正则表达式不符合您预期的原因。
- 3 回答
- 0 关注
- 474 浏览
添加回答
举报