2013-04-08 45 views
1

有人可以幫助我改進這個正則表達式,以便捕獲以http://,https://或www開頭的所有內容,然後繼續下去直到它達到「或」它包括標點和區分大小寫改善這個正則表達式,包括它匹配的東西,直到它匹配某個字符

這裏是現在正則表達式:。

(wwww|https?://) 
+0

與其嘗試編寫正則表達式來執行此操作,您爲什麼不在您的宿主語言中找到現有的解決方案? – 2013-04-08 01:03:56

+0

@AndyLester真的,我現在正在尋找。我正在嘗試的是獲取字符串中所有錨點的href屬性的值。通過定位,我的意思是一個HTML錨。 – IMUXIxD 2013-04-08 01:06:49

+0

所以你實際上是解析HTML。然後去獲得一個HTML解析器。 http://htmlparsing.com/爲您提供了許多不同語言的示例。你在用什麼語言? – 2013-04-08 03:13:44

回答

3
/(?:https?:\/\/|www)[^'"]*/i 

我避開了斜線,因爲如果您使用/.../表示法,它們可能會發生衝突。 [^'"]是一個倒排字符類,允許除引號外的所有內容。

編輯:我刪除了插入符號以匹配任何出現的模式,:?使組無法捕獲。

+0

啊,我看到斜槓沒有被轉義,在我實現它們之前,我正在嘗試使用這個正則表達式測試程序(http://regexpal.com/)和雖然你更有意義,但它不符合該測試人員的要求,我希望在http://,https://或www之後的所有內容直到但不包括'或「。 – IMUXIxD 2013-04-08 01:05:31

+0

你如何測試它?這種表達方式在egrep中適用於我。 $ echo「www.google.com/asdf'dontmatchme」| egrep -oi「^(https?:\/\/| www)[^'\」] *「 - 注意 - 引號需要轉義..如果引用:-) – 2013-04-08 01:07:37

+0

它適用於regexpal.com。 – 2013-04-08 01:30:25

1
@(www|https?://).*?(?=['"])@i 

.*?使得量詞不願所以它會在第一站報價而不是最後一個。

+0

我正在測試它,它似乎並沒有工作... – IMUXIxD 2013-04-08 00:52:19

+0

它甚至不匹配以http(s)開頭的東西://或者www更不用說停止在'或者' – IMUXIxD 2013-04-08 01:01:21

+0

斜槓 – 2013-04-08 01:03:06

0

以下的正則表達式將工作:

(?:https?:\/\/|www)[^'"]* 

您可以通過本場比賽的細節在www.debuggex.com走。

相關問題