在 bash shell 中,我这样设置行:
line="total active bytes: 256"
现在,我只想从那一行中获取数字,所以我这样做:
echo $(expr match "$line" '.*\([[:digit:]]*\)' )
我什么也没得到。但是,如果我在正则表达式中的第一个反斜杠之前添加一个空格字符,那么它就可以工作了:
echo $(expr match "$line" '.* \([[:digit:]]*\)' )
为什么?
最佳答案
这个空间一点也不特别。发生的情况是,在第一种情况下,.*
匹配整个字符串(即“贪婪地”匹配),包括数字,并且因为您已经使用 * 量化了数字
(与 \+
相对),正则表达式的该部分允许匹配 0 个字符。
通过在数字匹配之前放置一个空格,第一部分只能匹配但不包括字符串中的最后一个空格,留下要匹配的数字 \([[:digit:]]*\)
。
关于regex - "space"正则表达式中的 "expr match"字符有什么特别之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438992/