2011-02-03 59 views
0

你好,我想弄清這個正則表達式。我有一個URL可以在不同的位置有不同的查詢字符串參數。正則表達式幫助:包括/排除

test.aspx?foo=bar&abc=123 
test.aspx?abc=123&foo=bar 
test.aspx?foo=bar&abc=123#T1 
test.aspx?abc=123&foo=bar#T2 

我想只能找沒有#Tnumber

這裏是我到目前爲止的一個。

test.aspx\?(?!\#T[0-9]) 

但它仍然選擇所有這些,有沒有辦法讓一個字符串常量和掃描下來的線?

Juniorflip

+0

哪種語言?請添加到標籤... – Benjamin 2011-02-03 16:12:05

+0

爲什麼你使用正則表達式呢?你有沒有訪問URL解析庫? – SilentGhost 2011-02-03 16:12:44

回答

0

如果#Tnum總是在最後,你只需要做固定的比特。例如,像這樣:

test.aspx\?.*(?!\#T[0-9])...$ 

但是,這是非常脆弱的,因爲它依賴於不良網址始終處於一個非常特別的形式結束和良好的網址,總是有足夠的字符來吸收爲此匹配。負向後斷言是有所好轉,但仍然很脆弱,不太常用的支持:

test.aspx\?.*(?<!\#T[0-9])$ 

最好是寫一個正則表達式匹配你想要的東西,只是反轉的做什麼邏輯當你得到一場比賽時(即「如果比賽丟掉」,而不是「如果它匹配使用它」)。但是真的把URL的解析委託給一個專門的庫更好些,然後只是簡單地檢查一下片段標識符作爲一個邏輯組件,而不是一個可怕的RE攻擊。