2012-12-07 70 views
1

即時通訊尋找使用正則表達式來解析URL以獲取url的特定部分,如果找不到該模式,則不會顯示任何內容。
示例網址是爲特定參數值解析url

/te/file/value/jifle?uil=testing-cdas-feaw:jilk:&jklfe=https://value-value.jifels/temp.html/topic?id=e997aad4-92e0-j30e-a3c8-jfkaliejs5#c452fds-634d-f424fds-cdsa&bf_action=jildape

我希望得到它的黑體字。

目前即時通訊使用正則表達式 「d=([^#]*)」,但問題是IM也運行過這個模式的網址: 和即時得到它的大膽部分

/te/file/value/jifle?uil=testing-cdas-feaw:jilk:&jklfe=https://value-value.jifels/temp.html/topic?id=e997aad4-92e0-j30e-a3c8-jfkaliejs5 & bf_action = jildape

我寧願它沒有這個網址的比賽,因爲它不包含#

+0

是否有您正在編寫正則表達式的特定語言? – Scott

+0

即時通訊在java中這樣做 – user1103205

回答

0

的正則表達式是不是一個神奇的工具,你應該始終只使用b因爲問題涉及到一個字符串。在這種情況下,您的語言可能有一個工具來爲您分割網址。在PHP中,這是parse_url()。在Perl中,它是URI :: URL模塊。

您應該總是更喜歡現有的,經過充分測試的解決方案來解決這類常見問題,而不是自己寫。

0

所以你想要匹配id參數的值,但只有當它有一個尾部包含'#'符號(沒有匹配'#'或後面有什麼)?

不知道是什麼風格,你正在使用正則表達式的細節,如何像:

id=([^#&]*)# 
0
regex = "id=([\\w-])+?#" 

這將抓住一切是字符類[A-ZA-Z_0-9- ]之間'id ='和'#'之間的假設'id ='和'#'之間的所有字符類(即如果'&'在那裏,正則表達式將失敗)。

id= 

-self說明,這個查找的完全匹配 'ID ='

([\\w-]) 

- 該定義和字符類和組它。 \ w是一個轉義\ w。 '\ w'是java中預定義的字符類,等於[a-zA-Z_0-9]。由於您的示例中假定的模式,因此我在此課程中添加了' - '。

+? 

- 這是一個不情願的量詞查找正則表達式的可能的最短匹配。

# 

- 正則表達式的結尾,我們正在尋找匹配模式的最後一個字符。


如果您正在尋找抓住'id ='和之後的第一個'#'之間的每個字符,以下操作將起作用,它使用與上述相同的邏輯,但用 .替換字符類 [\\w-], 。

regex = "id=(.+?)#"