我在學習re
模塊二郎神的,我只是想在一個URL匹配的IP地址:IP地址二郎
Url = "http://192.168.1.241/mod/fun?arg",
re:run(Url, "(\\d{1,3}\\.){3}\\d{1,3}", [{capture, all, list}]).
但它返回{match,["192.168.1.168","1."]}
給我。爲什麼"1."
在退貨清單中?
我在學習re
模塊二郎神的,我只是想在一個URL匹配的IP地址:IP地址二郎
Url = "http://192.168.1.241/mod/fun?arg",
re:run(Url, "(\\d{1,3}\\.){3}\\d{1,3}", [{capture, all, list}]).
但它返回{match,["192.168.1.168","1."]}
給我。爲什麼"1."
在退貨清單中?
您已經爲ValueSpec指定了「all」,這意味着您將獲得所有匹配的子組。在這種情況下,包括「1.」。您可以只指定「第一個」,而不是「全部」,您將獲得的是第一個匹配組(完整的IP)。
你應該做的是這樣的:
Url = "http://192.168.1.241/mod/fun?arg",
re:run(Url, "(\\d{1,3}\\.){3}\\d{1,3}", [{capture, first, list}]).
這將返回:
{match,["192.168.1.241"]}
更多信息here。
編輯:萬一你錯過,這裏是在文檔(這說明它比我好多了:-))的相關部分:
指定哪些捕獲(子)模式是被退回。 ValueSpec既可以是描述預定義返回值集合的原子,也可以是包含要返回的索引或特定子模式名稱的列表。
子模式的預定義集:
所有
拍攝的所有子模式,包括完全匹配的字符串。這是默認設置。
第一
只有第一捕獲子模式,這始終是被檢體的完整匹配的部分。所有顯式捕獲的子模式都被丟棄。
all_but_first
除了第一個匹配的子模式,即所有明確捕獲子模式,但不是主體字符串的完整匹配的部分。如果正則表達式作爲一個整體與主體的大部分相匹配,但是您感興趣的部分位於明確捕獲的子模式中,這非常有用。如果返回類型是列表或二進制,則不返回您不感興趣的子模式是優化的好方法。
無
不要返回匹配的子模式在所有,得到單原子匹配爲成功匹配代替{匹配,列表()}當回報函數的返回值。指定一個空列表給出了相同的行爲。
嘗試:
((?:\\d{1,3}\\.){3}\\d{1,3})
您當前的支架只有一個IP地址的一部分匹配。如果你設置忽略它並匹配整個正則表達式,你會得到正確的結果。
您的工作也是如此。但是在你的表達中「?:」的含義是什麼? – lujb 2011-04-27 08:40:59
它忽略結果集中的組。 – hsz 2011-04-27 08:47:11
許多人認爲你。 – lujb 2011-04-28 06:39:41