Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 当模式(非)包含括号组时,为什么expr匹配输出不同的内容?_Regex_Linux_Bash_Pattern Matching - Fatal编程技术网

Regex 当模式(非)包含括号组时,为什么expr匹配输出不同的内容?

Regex 当模式(非)包含括号组时,为什么expr匹配输出不同的内容?,regex,linux,bash,pattern-matching,Regex,Linux,Bash,Pattern Matching,为什么 $ echo `expr match abcdef 'abc'` 给出匹配的字符数,即3,但 $ echo `expr match abcdef '\(abc\)'` 给出匹配的字符,哪一个是abc 我知道正则表达式匹配在这里起作用,但无法理解括号中的子表达式是如何在这里产生这种差异的?这是来自expr的手册页: 模式匹配返回\(和\)之间匹配的字符串或null;如果未使用\(和\),则返回匹配的字符数或0。 与正则表达式无关的。命令“expr”的工作方式不同。第一个返回匹配子字符串

为什么

$ echo `expr match abcdef 'abc'`
给出匹配的字符数,即3,但

$ echo `expr match abcdef '\(abc\)'`
给出匹配的字符,哪一个是abc


我知道正则表达式匹配在这里起作用,但无法理解括号中的子表达式是如何在这里产生这种差异的?

这是来自expr的手册页:

模式匹配返回\(和\)之间匹配的字符串或null;如果未使用\(和\),则返回匹配的字符数或0。


与正则表达式无关的。命令“expr”的工作方式不同。第一个返回匹配子字符串的长度,第二个返回匹配子字符串本身


有一个很好的总结:。您可以找到如何使用expr的组合摘要。

同意,手册页上这样说。但为什么会这样呢?这种行为的根本原因是什么?我们可以用正则表达式的用法来解释这一点吗?@abc:这就是expr的编程方式。没有别的了。