regex - "space"正则表达式中的 "expr match"字符有什么特别之处?

标签 regex

在 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/

相关文章:

regex - 将数字顺序添加到匹配的事件中

regex - 从字符串和文本数据中提取年份

javascript - javascript 正则表达式出现问题并替换

regex - 有一种方法可以按特异性对正则表达式列表进行排序吗?

python - 使用Python和正则表达式,如何从html中删除<sup>标签?

Java转义转义序列

regex - 使用正则表达式标志修饰符搜索 Visual Studio Code?

python - 通过 Lua 从 Redis 获取与键模式匹配的所有值

r - 使用 r 中的正则表达式提取一个子字符串,其中旁边的字符有所不同

javascript - 将 CSS "#"(ID) 替换为 .(Class)