什么';a的特别之处是什么;“空间”;“一个”字中的字符;expr match“;regexp?
在bash shell中,我将行设置为:什么';a的特别之处是什么;“空间”;“一个”字中的字符;expr match“;regexp?,regex,Regex,在bash shell中,我将行设置为: line="total active bytes: 256" 现在,我只想从那行中得到数字,所以我这样做: echo $(expr match "$line" '.*\([[:digit:]]*\)' ) 我什么也没得到。但是,如果在regexp中的第一个反斜杠之前添加空格字符,则它可以工作: echo $(expr match "$line" '.* \([[:digit:]]*\)' ) 为什么?这个空间一点也不特别。发生的情况
line="total active bytes: 256"
现在,我只想从那行中得到数字,所以我这样做:
echo $(expr match "$line" '.*\([[:digit:]]*\)' )
我什么也没得到。但是,如果在regexp中的第一个反斜杠之前添加空格字符,则它可以工作:
echo $(expr match "$line" '.* \([[:digit:]]*\)' )
为什么?这个空间一点也不特别。发生的情况是,在第一种情况下,
*
匹配整个字符串(即,它“贪婪地”匹配),包括数字,并且由于您已经用*
量化了数字(与\+
相反),因此允许正则表达式的该部分匹配0个字符
通过将空格放在数字匹配之前,第一部分只能匹配到字符串中的最后一个空格,而不包括最后一个空格,让数字由
\([[:digit:]*\)匹配。
是否有任何方法可以提取完整的数字,而不必指定其前面的空格,即,是否有任何方法使*
不贪婪,或者让\+
贪婪?@awardak你可以试试'[^[:digit:]*\([[:digit:]*\)