2012-06-16 61 views
1

這是我的字符串:正則表達式不會匹配

<link href="/post?page=4&amp;tags=example" rel="last" title="Last Page"> 

從那裏我試圖獲得4指出page參數,使用正則表達式:

link href="/post?page=(.*?)&amp;tags=(.*?)" rel="last" 

我會然後收集第一組中有4個,因爲內容可以改變,所以tags參數具有通配符。但是,我似乎沒有得到這個比賽,任何人都可以幫忙嗎?

而且我知道我不應該使用正則表達式來解析HTML,但這只是一件小事,爲此導入一個巨大的模塊將是一種浪費。

+0

爲什麼不使用數字匹配器來匹配...數字? –

回答

1

link href="/post\?page=(.*?)&amp;tags=(.*?)" rel="last"
你以前?

0

如果page參數始終排在第一位,請嘗試使用PCRE/\?page=(\d+)/。匹配組1將包含頁碼。

1

我想這可能是更好的改變您的捕獲組的東西有點不同,但會抓住一切到終止字符:

link href="/post?page=([^&]+)&amp;tags=([^\"]+)" rel="last"

在字符首先使用否定字符組告訴正則表達式引擎「捕獲除了這裏列出的所有字符」。這使得捕獲所有東西非常容易,直到遇到終止符,例如amperstand和雙引號。假設你正在使用PHP或Java,這應該也會稍微改善正則表現。

+0

他已經匹配非貪婪('。*?')而不是貪婪('。*'),所以他會在第一次出現下一個字符時停止匹配子組。 – speakr

3

忘記斜線假設你使用的是/regex literal/,你需要逃避這條道路/\/

另外,它取決於你如何得到這個字符串。這是真的鍵入的,還是它是內部HTML的一部分,然後你再讀出來?如果是這樣的話,那麼innerHTML將不會成爲你期望的結果,因爲瀏覽器會「正常化」它。

如果它是一個innerHTML,那麼獲取標籤會比較容易,然後獲取標籤的href屬性,然後將其表達。