【发布时间】:2011-08-07 07:22:57
【问题描述】:
我有这个正则表达式,它工作得很好,但不是在所有情况下,例如,如果我有一个长网址说“http://www.gob.cl/especiales/politicas-y-propuestas-de-accion-para- el-desarrollo-de-la-educacion-chilena/”它只会返回“http://www.gob”。作为网址的一部分
这是我的代码
$regexUrl = "((https?|ftp)\:\/\/)?"; // 方案 $regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;? &=\$_.-]+)?@)?"; // 用户和通行证 $regexUrl .= "([a-zA-Z0-9-]+)\.([a-zA-Z]{2,3})"; //主机或IP $regexUrl .= "(\:[0-9]{2,5})?"; // 港口 $regexUrl .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?"; // 小路 $regexUrl .= "(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:@&%=+\/\$_.-]*)?"; // 获取查询 $regexUrl .= "(#[a-zA-Z_.-][a-zA-Z0-9+\$_.-]*)?"; // 锚 //if(preg_match_all("#\bhttps?://[^\s()]+(?:\([\w\d]+\)|([^[:punct:]\s]|/ ))#", $message, $matches1, PREG_PATTERN_ORDER)) //$pattern = '/((https?|ftp)\:(\/\/)|(文件\:\/{2,3}))?(((25[0-5]|2[0 -4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9] |[01]?[0-9][0-9]?))|(((([a-zA-Z0-9]+)(\.)?)+)(\.)(com|org |net|gov|mil|biz|info|mobi|name|aero|jobs|museum|[a-z]{2}))([\/][\/a-zA-Z0-9\.]*)* ([\/]?(([\?][a-zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)([\&][a -zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)*))?/'; if(preg_match_all("/$regexUrl/", $urlMessage, $matches1, PREG_PATTERN_ORDER)) { 尝试 { foreach($matches1[0] as $urlToTrim1) { $url= $urlToTrim1; 回声 $url; } } 捕获(异常 $e) { $url="-1"; } }是否有一个通用的正则表达式可以解析所有类型的网址。
【问题讨论】: