Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
什么';a的特别之处是什么;“空间”;“一个”字中的字符;expr match“;regexp?_Regex - Fatal编程技术网

什么';a的特别之处是什么;“空间”;“一个”字中的字符;expr match“;regexp?

什么';a的特别之处是什么;“空间”;“一个”字中的字符;expr match“;regexp?,regex,Regex,在bash shell中,我将行设置为: line="total active bytes: 256" 现在,我只想从那行中得到数字,所以我这样做: echo $(expr match "$line" '.*\([[:digit:]]*\)' ) 我什么也没得到。但是,如果在regexp中的第一个反斜杠之前添加空格字符,则它可以工作: echo $(expr match "$line" '.* \([[:digit:]]*\)' ) 为什么?这个空间一点也不特别。发生的情况

在bash shell中,我将行设置为:

line="total active bytes:         256"
现在,我只想从那行中得到数字,所以我这样做:

echo $(expr match "$line" '.*\([[:digit:]]*\)' )
我什么也没得到。但是,如果在regexp中的第一个反斜杠之前添加空格字符,则它可以工作:

echo $(expr match "$line" '.* \([[:digit:]]*\)' )

为什么?

这个空间一点也不特别。发生的情况是,在第一种情况下,
*
匹配整个字符串(即,它“贪婪地”匹配),包括数字,并且由于您已经用
*
量化了数字(与
\+
相反),因此允许正则表达式的该部分匹配0个字符


通过将空格放在数字匹配之前,第一部分只能匹配到字符串中的最后一个空格,而不包括最后一个空格,让数字由
\([[:digit:]*\)匹配。

是否有任何方法可以提取完整的数字,而不必指定其前面的空格,即,是否有任何方法使
*
不贪婪,或者让
\+
贪婪?@awardak你可以试试
'[^[:digit:]*\([[:digit:]*\)