0

我有一个包含文本的字符串:

...,"names":"exampleName",...

我有以下 if 语句来检查正则表达式模式是否与字符串匹配:

if [[ $string =~ names\":\"(\w+)\" ]]; then
      echo "Matches"
fi

问题是 echo 语句永远不会被执行,这本质上意味着正则表达式不匹配。

我在这里做错了吗?因为它应该匹配...

干杯。

4

3 回答 3

1

这里的问题似乎是您使用了不受支持的字符类标识符。根据下面的参考文献 1,似乎 bash 使用 POSIX 字符类,而不是 vi 和其他地方使用的斜线转义字符类。

而不是使用\w你应该使用[[:alnum:]_](字母数字加下划线)。我会说使用[[:word:]],但显然并非所有版本的 bash 都支持(因为我的不支持)。

适当修改的代码版本如下所示:

string='...,"names":"exampleName",...'

if [[ $string =~ names\":\"([[:alnum:]_]+)\" ]]; then
  echo "Matches"
fi

参考:

  1. http://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html
  2. http://www.regular-expressions.info/posixbrackets.html
于 2013-03-03T23:54:44.453 回答
1

这是一个引用问题,参见例如这个

尝试:

$ string='...,"names":"exampleName",...'

$ re='names":"(\w+)"'

$ if [[ $string =~ $re ]]; then echo match; fi
match
于 2013-03-03T22:18:16.423 回答
0

尝试:

if [[ $string =~ names\":\"[[:alnum:]_]+\" ]]; then 
于 2013-03-03T23:22:43.257 回答