了解 expr 实用程序的正则表达式匹配功能

了解 expr 实用程序的正则表达式匹配功能

谁能帮助我了解正则表达式匹配如何与该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

相关内容