2012-07-18 98 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