2013-07-11 56 views
0

我有一個字符串 -正則表達式JSON

xyz":abc,"lmn 

我想提取ABC。這將是什麼正則表達式?

我想這一點 -

/xyz\":(.*?),\"lmn/ 

但它不取任何結果。

+0

當我測試''XYZ 「:ABC」 lmn'.match(/ XYZ \ 「?(*),\」 LMN /);'返回'[ 「XYZ」:ABC, 「lmn」,「abc」]'。你在嘗試什麼不起作用? – Joe

+1

你能提供你得到的錯誤嗎?因爲[它確實有效](http://regex101.com/r/aT5tE4)。你也使用PHP或C#?您可能提供您正在使用的完整代碼。 – HamZa

+0

你不需要使用ac#regex開頭和後面的'/',這可能是你的問題 –

回答

1

在C#中,你可以使用

var regex = new Regex(@"(?<=xyz\"":).*?(?=,\""lmn)"); 
var value = regex.Match(@"xyz"":abc,""lmn").Value; 

注意這使得使用C#逐字字符串前綴@這意味着\不作爲轉義字符處理的。您將需要使用雙重",以便單個字符串中將包含一個"

這個正則表達式使用前綴和後綴匹配規則,以便您可以在不必從結果中選擇特定組的情況下獲得匹配。

另外,您可以通過以下操作

var match = regex.Match(@"xyz"":abc,""lmn"); 
var isMatch = match.Success; 

使用相匹配的

var regex=new Regex(@"xyz\"":(.*?),\""lmn"); 
var value = regex.Match(@"xyz"":abc,""lmn").Groups[1].Value; 

組您可以檢查匹配的存在,然後跟進,這取決於正則表達式或者match.Valuematch.Groups[1].Value你用過。

編輯 其實並不需要在C#中的正則表達式的轉義"所以你可以改用以下任。

var regex = new Regex("(?<=xyz\":).*?(?=,\"lmn)"); 
var regex = new Regex("xyz\":(.*?),\"lmn"); 

這兩個不使用逐字字符串前綴,因此\"被翻譯成剛"在正則表達式給出的的(?<=xyz":).*?(?=,"lmn)xyz":(.*?),"lmn

另外一個正則表達式,如果是一個完整的字符串匹配,而不是一個子字符串,你會想要以下之一。

var regex = new Regex("(?<=^xyz\":).*?(?=,\"lmn$)"); 
var regex = new Regex("^xyz\":(.*?),\"lmn$");