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