首页 新闻 会员 周边

这个正则表达式为什么会出错

0
悬赏园豆:50 [已解决问题] 解决于 2013-04-28 17:28
 [A-Za-z0-9]+\.?[A-Za-z0-9-\.]+\.[^\.][a-z]+ 
 
上面这个正则匹配
 www.webmarchand.com/a/liste.../idx/.../liste_produit.htm  
这段网址时,会出现www.webmarchand.com 和 liste.../idx  和 produit.htm,
我想要的结果是只有主域名出现.也就是屏蔽掉含有... 以及以.htm.php这些结尾的,我该怎么改呢?
谢谢大家了
败给坚持的主页 败给坚持 | 初学一级 | 园豆:159
提问于:2012-07-15 09:27
< >
分享
最佳答案
0

[A-Za-z0-9]+\.[A-Za-z0-9]+\.[^\.][a-z]+     改成这样就可以

收获园豆:50
墨猦 | 小虾三级 |园豆:668 | 2012-07-15 12:44

如果是 163.com 这种只有一个点的就不行了

败给坚持 | 园豆:159 (初学一级) | 2012-07-15 14:07

produit.htm 跟163.com 是一样的  没办法区分 所以只能获得www.webmarchand.com/ 然后把”/“去掉

正则为 [A-Za-z0-9]+\.[A-Za-z0-9]+\.[^\.][a-z]+/

墨猦 | 园豆:668 (小虾三级) | 2012-07-15 16:19
其他回答(3)
0

[^/]+

dudu | 园豆:30994 (高人七级) | 2012-07-15 09:54

这个应该写到哪里呢?

支持(0) 反对(0) 败给坚持 | 园豆:159 (初学一级) | 2012-07-15 10:10

@败给坚持: 这个就是整个匹配的正则表达式

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-15 10:18

@dudu: 如果地址没有/,这个就失效了

支持(0) 反对(0) 败给坚持 | 园豆:159 (初学一级) | 2012-07-15 11:38

@败给坚持: 你测试过有地址没有/的情况?

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-15 11:51

@dudu: 不好意思,我再说一下我的需求,你可能理解错了,不是从一个网址里面提取主域名.我的文本里面的内容比较混乱.什么内容都有,我要从里面提取网址,所以你那个太简单的是不能用的...网址可能是www.xxx.de或者xxx.com或者带有具体页面和参数的地址,,但是我只要主域名,就是这样..

支持(0) 反对(0) 败给坚持 | 园豆:159 (初学一级) | 2012-07-15 14:10

@败给坚持: 网址前面有http://吗?

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-15 14:33

@dudu: 是没有http://的

支持(0) 反对(0) 败给坚持 | 园豆:159 (初学一级) | 2012-07-15 15:24

@败给坚持: 试试这个:([\w]+([.]\w+)+)

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-15 16:01

@dudu: 这个限制的不够严格.小数都出来了,而且对于有-的网址不行...你可以参考我那个再修改一下么.我那个加了些限制了,谢谢啦

支持(0) 反对(0) 败给坚持 | 园豆:159 (初学一级) | 2012-07-15 18:41

@败给坚持: 的确不够严格,只是给你提供个思路

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-15 20:35

@dudu: 要是能把我那句正则再强壮一点就好了,不过还是谢谢你

支持(0) 反对(0) 败给坚持 | 园豆:159 (初学一级) | 2012-07-15 21:00
0

如果是这样,用indexOf也可以的

artwl | 园豆:16736 (专家六级) | 2012-07-15 10:55

源文档是一个混乱的文本,不只是这一个地址

支持(0) 反对(0) 败给坚持 | 园豆:159 (初学一级) | 2012-07-15 14:11
0
<?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
Zjmainstay | 园豆:355 (菜鸟二级) | 2012-07-16 00:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册