[A-Za-z0-9]+\.[A-Za-z0-9]+\.[^\.][a-z]+ 改成这样就可以
如果是 163.com 这种只有一个点的就不行了
produit.htm 跟163.com 是一样的 没办法区分 所以只能获得www.webmarchand.com/ 然后把”/“去掉
正则为 [A-Za-z0-9]+\.[A-Za-z0-9]+\.[^\.][a-z]+/
[^/]+
这个应该写到哪里呢?
@败给坚持: 这个就是整个匹配的正则表达式
@dudu: 如果地址没有/,这个就失效了
@败给坚持: 你测试过有地址没有/的情况?
@dudu: 不好意思,我再说一下我的需求,你可能理解错了,不是从一个网址里面提取主域名.我的文本里面的内容比较混乱.什么内容都有,我要从里面提取网址,所以你那个太简单的是不能用的...网址可能是www.xxx.de或者xxx.com或者带有具体页面和参数的地址,,但是我只要主域名,就是这样..
@败给坚持: 网址前面有http://吗?
@dudu: 是没有http://的
@败给坚持: 试试这个:([\w]+([.]\w+)+)
@dudu: 这个限制的不够严格.小数都出来了,而且对于有-的网址不行...你可以参考我那个再修改一下么.我那个加了些限制了,谢谢啦
@败给坚持: 的确不够严格,只是给你提供个思路
@dudu: 要是能把我那句正则再强壮一点就好了,不过还是谢谢你
如果是这样,用indexOf也可以的
源文档是一个混乱的文本,不只是这一个地址
<?php $string1 = 'www.webmarchand.com/a/liste.../idx/.../liste_produit.htm'; $string2 = 'webmarchand.com/a/liste.../idx/.../liste_produit.htm'; $string3 = 'webmarchand.com'; $pattern = '/([^\/]+)\/?/i'; for($i=1;$i<4;$i++){ preg_match($pattern,${'string'.$i},${'matches'.$i}); var_dump(${'matches'.$i}); echo "<br/>"; } //End_php //输出 array(2) { [0]=> string(20) "www.webmarchand.com/" [1]=> string(19) "www.webmarchand.com" } array(2) { [0]=> string(16) "webmarchand.com/" [1]=> string(15) "webmarchand.com" } array(2) { [0]=> string(15) "webmarchand.com" [1]=> string(15) "webmarchand.com" } preg_match($pattern,$string,$matches); $matches[1]为你要的结果。 **************************分割线*************************** 又“仔细”看了你的评论,我上面的方案应该只能针对一个链接,针对整个文本解决方案: $pattern = '/<a(?:.*?)href="((?:http(?:s?):\/\/)?([^\"\/]+)(?:[^\"]*))"(?:[^>]*?)>(?:[^<]*?)<\/a>/i'; preg_match_all($pattern, $data, $links); $links[2]是你要的结果。 测试通过记得回复!!!
测试网址:phpParseLinks