当模式(不)包含括号组时,为什么 expr match 输出不同的结果?
为什么
$ echo `expr match abcdef 'abc'`
给出匹配的字符数,即 3,但
$ echo `expr match abcdef '\(abc\)'`
给出匹配的字符数,即 abc ?
我知道正则表达式匹配在这里发挥作用,但无法理解带括号的子表达式如何在这里产生这种差异?
Why does
$ echo `expr match abcdef 'abc'`
give number of characters matched, which is 3, but
$ echo `expr match abcdef '\(abc\)'`
gives the characters matched , which is abc ?
I understand regex matching is in play here, but cannot understand how having a parenthesized sub expression is making this difference here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是来自 expr 的手册页:
模式匹配返回 \( 和 \) 之间匹配的字符串或 null;如果不使用 \( 和 \),则返回匹配的字符数或 0。
手册页。
This is from the man page of expr :
Pattern matches return the string matched between \( and \) or null; if \( and \) are not used, they return the number of characters matched or 0.
Man page.
这与正则表达式无关。只是命令“expr”的工作方式有所不同。第一个返回匹配子字符串的长度,第二个返回匹配子字符串本身。
有一个非常好的总结:TLDP refcard。您可以找到如何使用 expr 的组合摘要。
That has nothing to do with regular expressions. It is only a difference how the command "expr" works. The first one returns the length of the matching substring and the second one returns the matching substring itself.
There is a very good summary: TLDP refcard. You find a summary of combinations how expr can be used.