2012-06-01 81 views
2

隨着輸入:正則表達式匹配托架時它不應該

「一個[HREF * = \」測試\「]」

我試圖標籤名從符合以下jQuery選擇:

Regex r = new Regex("^[A-z]+"); 
string tagName = r.Match("a[href*=\"test\"]").Value; 

的問題是它到z收集左括號,而不是隻答:

的tagName =「一個[HREF」

爲什麼它收集托架如果在表達式未指定呢?

回答

10

這是因爲這

[A-z] 

創建一個從ASCII 'A' 到ASCII 'Z' 的字符範圍。除Z和a之外的字母之外還有其他字符,其中之一是[字符。改用:

[A-Za-z] 

A-Z範圍相匹配的範圍從a-z,但並不表明他們之間落在字符。你可以看一個ASCII table看到細節,但該總結的字符(在他們的數字ASCII順序)是這樣的:

A, B, ..., Y, Z, [, \, ], ^, _, `, a, b, c, ..., z 
+0

作品像一個魅力,謝謝 – John

+0

@約翰,如果它解決了你的問題,你應該接受答案是正確的。 (請在此答案的選票下方標記,以便選中標記變爲綠色。) –

-1

你應該嘗試像regexpal一個工具來測試這樣的東西。這裏是你的榜樣:

http://regexpal.com/?flags=g&regex= ^%5BA-Z%5D%2B &輸入=一%5Bhref *%3D%5C%22test%5C%22%5D

什麼怪我是小寫「 z「 - 出於某種原因,即允許支架通過。

嘗試這種情況:

^[^\[]+ 

http://regexpal.com/?flags=g&regex= ^%5B ^%5C%5B%5D%2B &輸入=α%5Bhref *%3D%5C%22test%5C%22%5D

+1

我不是downvoter,但我認爲投票發生是因爲您實際上未提供問題的答案(**爲什麼**會在表達式中未指定時收集括號?)。如果問題是如此基本的問題,在很多人的書中提供解決方法並承認自己對此問題感到困惑。 – kopischke