2014-09-11 39 views
0

我有一個正在使用的RegEx從iOS用戶代理字符串獲取版本號。正則表達式在Javascript中返回一個匹配,但不是C#

我正則表達式爲/OS ([0-9_]+)/g,並且它被應用到用戶代理字符串像Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53

我在網上正則表達式的工具進行了測試,它聲稱它應該工作,我打算。我的測試是here。我用Javascript試過了,我得到了一場比賽。然後我把它放到C#中,我沒有找到匹配。我使用Regex.Match(...)

string uaString = @"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53"; 

bool matched = Regex.IsMatch(uaString, @"/(?:OS)([0-9_]+)/g"); // is false 

Match match = Regex.Match(uaString, @"/(?:OS)([0-9_]+)/g"); 
string osVersion = match.Groups[0].Value; // is "" 

我不是正則表達式非常熟悉,並不能看到我在做什麼錯。我讀過的大多數頁面都是關於從C#到JS的問題,以及由於JS不支持C#所做的一切而造成的問題。兩者之間的語法會有差異嗎?

+1

嘗試使用http://regexhero.net/ – 2014-09-11 10:39:08

+0

調試您的正則表達式Yuliam的答案和dotnetfiddle.net都非常有幫助。希望我在幾個小時前找到他們:) – 2014-09-11 10:49:35

回答

3

取出//g

@"(?:OS)([0-9_]+)" 

輸出

OS 7_0 

DEMO

如果你想使用全局搜索,用Regex.Matches,它將返回如果有一個以上的比賽。

在輸入字符串中搜索正則表達式的所有匹配項 並返回所有匹配項。

相關問題