Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 BASH_重新匹配在正则表达式匹配后显示空字符串_Regex_Bash_Ubuntu Server - Fatal编程技术网

Regex BASH_重新匹配在正则表达式匹配后显示空字符串

Regex BASH_重新匹配在正则表达式匹配后显示空字符串,regex,bash,ubuntu-server,Regex,Bash,Ubuntu Server,我只是想学习巴什胡的复赛 在ubuntu 16.10上,我为BASH_REMATCH编写了一个小脚本: #!/bin/bash x='sadas123fnrejkwhfklde' if [[ $x =~ ([0-9]*) ]] then echo "match" echo ${BASH_REMATCH[1]} else echo "not match" fi 但是,当/i运行此脚本时,只显示“匹配”,而不是捕获的匹配 bash版本是: $ bash --version GNU b

我只是想学习巴什胡的复赛

在ubuntu 16.10上,我为BASH_REMATCH编写了一个小脚本:

#!/bin/bash
x='sadas123fnrejkwhfklde'
if [[ $x =~ ([0-9]*) ]] 
then
  echo "match"
  echo ${BASH_REMATCH[1]}
else
  echo "not match"
fi
但是,当/i运行此脚本时,只显示“匹配”,而不是捕获的匹配

bash版本是:

$ bash --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$bash--版本
GNUBash,版本4.3.48(1)-发行版(x86_64-pc-linux-GNU)
版权所有(C)2013免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件;您可以自由更改和重新分发它。
在法律允许的范围内,不存在任何担保。
感谢您的反馈。

([0-9])*
匹配字符串中任何位置出现的零个或多个数字。因此,它将生成一个空字符串,这是一个有效的匹配项

将表达式更改为
([0-9]+)
,使其匹配一个或多个数字

#!/bin/bash
x='sadas123fnrejkwhfklde'
if [[ $x =~ ([0-9]+) ]]
then
  echo "match"
  echo ${BASH_REMATCH[1]}
else
  echo "not match"
fi
屈服

match
123

但它是正则表达式吗?所以,即使我用了*号,它也应该匹配整个三位数。我说的对吗?是的,它是贪婪的。模式
[0-9]*
匹配字符串的开头,该字符串不以数字开头,因此即使贪婪匹配也仍然为空。对我来说,它打印“匹配”,但不打印数字