当模式(不)包含括号组时,为什么 expr match 输出不同的结果?

发布于 2024-11-17 12:26:31 字数 232 浏览 8 评论 0原文

为什么

$ 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幽蝶幻影 2024-11-24 12:26:31

这是来自 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.

昔日梦未散 2024-11-24 12:26:31

这与正则表达式无关。只是命令“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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文