我有一个包含文本的字符串:
...,"names":"exampleName",...
我有以下 if 语句来检查正则表达式模式是否与字符串匹配:
if [[ $string =~ names\":\"(\w+)\" ]]; then
echo "Matches"
fi
问题是 echo 语句永远不会被执行,这本质上意味着正则表达式不匹配。
我在这里做错了吗?因为它应该匹配...
干杯。
这里的问题似乎是您使用了不受支持的字符类标识符。根据下面的参考文献 1,似乎 bash 使用 POSIX 字符类,而不是 vi 和其他地方使用的斜线转义字符类。
而不是使用\w
你应该使用[[:alnum:]_]
(字母数字加下划线)。我会说使用[[:word:]]
,但显然并非所有版本的 bash 都支持(因为我的不支持)。
适当修改的代码版本如下所示:
string='...,"names":"exampleName",...'
if [[ $string =~ names\":\"([[:alnum:]_]+)\" ]]; then
echo "Matches"
fi
参考:
这是一个引用问题,参见例如这个
尝试:
$ string='...,"names":"exampleName",...'
$ re='names":"(\w+)"'
$ if [[ $string =~ $re ]]; then echo match; fi
match
尝试:
if [[ $string =~ names\":\"[[:alnum:]_]+\" ]]; then