我有一個字符串,其中包括文本:猛砸正則表達式沒有捕捉
...,"names":"exampleName",...
我有以下的,如果來檢查,如果在正則表達式匹配字符串聲明:
if [[ $string =~ names\":\"(\w+)\" ]]; then
echo "Matches"
fi
問題是echo語句永遠不會被執行,這實際上意味着正則表達式不匹配。
我在這裏做錯了嗎?因爲它應該匹配...
乾杯。
我有一個字符串,其中包括文本:猛砸正則表達式沒有捕捉
...,"names":"exampleName",...
我有以下的,如果來檢查,如果在正則表達式匹配字符串聲明:
if [[ $string =~ names\":\"(\w+)\" ]]; then
echo "Matches"
fi
問題是echo語句永遠不會被執行,這實際上意味着正則表達式不匹配。
我在這裏做錯了嗎?因爲它應該匹配...
乾杯。
嘗試:
if [[ $string =~ names\":\"[[:alnum:]_]+\" ]]; then
這裏的問題似乎是,您使用的是不支持的字符類標識符。根據下面的引用1,看來bash使用POSIX字符類而不是vi和其他地方使用的斜槓轉義字符類。
而不是使用\w
您應該使用[[:alnum:]_]
(字母數字加下劃線)。我會說使用[[:word:]]
,但顯然不是所有版本的bash都支持(因爲我的不支持)。
代碼適當修改的版本是這樣的:
string='...,"names":"exampleName",...'
if [[ $string =~ names\":\"([[:alnum:]_]+)\" ]]; then
echo "Matches"
fi
參考文獻:
怎樣$字符串分配? – suspectus 2013-03-03 21:56:05
$字符串被分配的輸出:string = $(curl ...) – Nick 2013-03-03 21:57:46