2011-09-25 30 views
1

我必須從url中提取產品的id值。正則表達式從Url中提取數字(端口號除外)

它是搜索引擎友好(網址路由)。

URL可以

http://www.example.com/{param0}/{param1}/123/{param2}/{paramN} 

或者

http://localhost:6847/{param0}/{param1}/123/{param2}/{paramN} 

對於第一個鏈接是沒有問題的。 但第二我想只提取123或(ID)< - (這是一個整數)。

我知道,如果我想只提取號碼,我可以使用

[0-9]+ 

,但我怎麼能告訴regengine如何從URL所有的數值數據,除了數字,可能有

: 

之前。 我使用:

((!:)[0-9]+) 

這是不正確的。 每一個建議wellcamed :)

謝謝。

回答

1

在你的例子中,需要更多的信息來分隔123

表面上看,(?<!:)[0-9]+會發現通過前面不帶數字的第一叢「:」

編輯可能是更準確,這(?<!:\d+)[0-9]+會更好。
請注意這是如果.NET允許可變長度後視(我認爲它)。

對於固定長度向後看(PCRE),這樣的事情可能工作:(?<![:\d])[0-9]+

EDIT2

@ Sanosay-想着.NET類型lookbehinds後,上述正則表達式需要略有變化。 它應該是(?<!:\d*)[0-9]+。那是因爲在'1234',1將滿足斷言。

希望你認爲這是事實。我做了兩個正則表達式的測試用例
@"(?<!:\d*)[0-9]+"
@"(?<![:\d])[0-9]+"
滿足條件。

鏈接到ideone C#代碼是在這裏:http://ideone.com/tLn2j

+0

的123是用於例如產品的ID(只有INT)。 我會測試你的解決方案..我認爲它會工作:) – Sanosay

+0

:/它不工作。 (我想我之前已經測試過這個解決方案)。 輸出http:// localhost:14964/rToz/product/311 /測試:4964 – Sanosay

+0

使用修訂後的正則表達式。 – sln