![了解 expr 实用程序的正则表达式匹配功能](https://linux22.com/image/204655/%E4%BA%86%E8%A7%A3%20expr%20%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%8A%9F%E8%83%BD.png)
谁能帮助我了解正则表达式匹配如何与该expr
实用程序配合使用?我已阅读其手册页,下面是摘录:
STRING : REGEXP
anchored pattern match of REGEXP in STRING
但我不明白它是如何工作的。我做了一些测试:
[root@192 ~]# expr "abc" : '.*'
3
[root@192 ~]# expr "abc" : 'b.*'
0
[root@192 ~]#
expr
这两个命令在做什么?对于第一个命令,似乎expr
从第一个字符找到了匹配项abc
并报告了匹配的长度。但为什么它会产生0
第二个命令呢?我只是不明白这里的逻辑。
顺便说一句,我知道正则表达式是如何工作的。
答案1
引用的联机帮助页的相关部分是:锚定的火柴。这意味着正则表达式需要匹配整个字符串,从头到尾。所以你.*
实际上是^.*$
。诚然,手册页不是很清楚,但是,是的,看起来它默认会打印匹配的长度:
$ expr "abc" : '.*'
3
显然,您可以使用捕获组让它打印匹配本身:
$ expr "abc" : '\(.*\)'
abc
$ expr "abc" : '.\(b.\)'
bc