2012-07-18 68 views
1

我想從一個XML文件中提取所有的URL,excludeing的跟蹤代碼的URL刪除跟蹤代碼:的Preg匹配所有URL在XML

下面是一個URL的例子,它們都遵循相同的格式

http://www.domain.com.au/category/pXXXXXX?uni_id=XXXXXX&cid=1_demo_1 

這樣的域之間唯一改變的是XXXXXX這是一個數值

最終的結果我想是

http://www.domain.com.au/category/pXXXXXX 

我曾嘗試在下面的代碼中使用的preg_replace,但它結束了一個隨機的(我認爲)號

$data = preg_replace('/http\:\/\/www\.domain\.com.au\/[^\?]+([^.]+)/','',$data); 
+0

'strpos( )'for'?',並用'substr()'剪切' – zerkms 2012-07-18 23:41:14

+1

我下面的編輯應該可以工作。 – 2012-07-19 00:38:52

回答

1

匹配的URL在XML與preg_match()更換整個網址:

preg_match("(http://[^\s]+|ftp://[^\s]+)", $input, $matches); 

然後,你應該使用preg_replace(),應該只匹配需要刪除字符串的一部分:

foreach($matches as $value) 
{ 
    preg_replace("(\?[^\s]+)","",$value); 
} 
+0

我已經稍微改變了這篇文章 - 擔心你的答案會用所有數據替換?在裏面。 – Franco 2012-07-18 23:51:59

+0

嗯,*爲什麼*你使用'[h | f] [t] {1,2} p'而不是'http | ftp'?這是a)更容易閱讀,b)更短,c)正確(不匹配fttp)。 – dlras2 2012-07-19 00:21:30