2012-08-06 46 views
2

我真的是RegEx的主要新手,可以做一些幫助。從多個URL中提取包含/ find /的URL?

我有一個很長的字符串,包含大量的URL和其他文本,其中一個URL包含has/find /。即:

1. http://www.example.com/not/index.html 
2. http://www.example.com/sat/index.html 
3. http://www.example.com/find/index.html 
4. http://www.example.com/rat/mine.html 
5. http://www.example.com/mat/find.html 

我會用什麼樣的正則表達式的返回是在該列表中3號的URL,但不能退貨我5號呢?我想基本上我正在尋找的是一種返回包含特定字母和/或順序的整個單詞的方式。

TIA

+0

數據如何存儲?在數組中? – 2012-08-06 22:57:24

+0

只是一個很長的字符串。 – 2012-08-06 23:18:59

+0

帶換行符的長字符串?我認爲它沒有行號... – 2012-08-06 23:26:49

回答

2

我會假設你想preg_match("%/find/%",$input);或相似。

編輯:爲了獲得完整的線,使用方法:

preg_match("%^.*?/find/.*$%m",$input); 
+1

如果這就是他想要的所有'strpos()'將完成這項工作。我懷疑他想提取整個網址,除非網址被嚴格定義,否則網址會變得更加棘手,因爲網址中可能存在熵 – DaveRandom 2012-08-06 22:48:16

+0

是的,我希望模式出現在整個單詞中。 – 2012-08-06 22:50:03

+0

那麼在這種情況下,請參閱編輯。 – 2012-08-06 22:55:11

0

除了Kolink的回答,如果你想正則表達式匹配整個URI:

這是絕不的詳盡的URI正則表達式,但是this is a good starting point。我在關鍵點投入了一些選項,如.com.net.org。在現實中你將有一個相當艱難的時間匹配正則表達式的URI由於缺乏合格的,但你可以非常接近

從上面的鏈接的正則表達式:

/(https?:\/\/)?(www\.)?([a-zA-Z0-9-_]+)\.(com|org|net)\/(find)\/([a-zA-Z0-9-_]+)\.(html|php|aspx)?/is

1

我可以建議您使用RegExr來生成正則表達式。

您可以鍵入樣本列表(如上所示)並使用調色板創建RegExp並對其進行實時測試。該程序可在線和作爲可下載的Adobe AIR軟件包提供。

很抱歉,我現在無法訪問他們的網站,所以我附上the AIR package of the downloadable version

我真的很推薦你,因爲它幫助像我這樣的RegExp新手設計出最複雜的圖案。

但是,對於你的問題,我認爲這只是

\/find\/ 

順利,如果你想獲得一個是/否的結果(即,如果它包含或不/find/),否則得到充分線上使用

.*\/find\/.*