2013-03-03 42 views
0

我有一個字符串,其中包括文本:猛砸正則表達式沒有捕捉

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

我有以下的,如果來檢查,如果在正則表達式匹配字符串聲明:

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

問題是echo語句永遠不會被執行,這實際上意味着正則表達式不匹配。

我在這裏做錯了嗎?因爲它應該匹配...

乾杯。

+0

怎樣$字符串分配? – suspectus 2013-03-03 21:56:05

+0

$字符串被分配的輸出:string = $(curl ...) – Nick 2013-03-03 21:57:46

回答

1

這是一個引用的問題,參見例如this

嘗試:

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

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

$ if [[ $string =~ $re ]]; then echo match; fi 
match 
+0

轉義引號不會觸發字符串匹配。他的問題可能是由於\ w'。 – chepner 2013-03-04 13:42:06

0

嘗試:

if [[ $string =~ names\":\"[[:alnum:]_]+\" ]]; then 
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