需要preg_match_all链接

时间:2012-06-20 09:08:09

标签: php regex

我有一个像这样的字符串:

$string = "some text
  http://dvz.local/index/index/regionId/28
        http://stuff.kiev.ua/roadmap_page.php http://192.168.3.192/roadmap_page.php
         http://192.168.3.192/roadmap_page.php#qwe";

需要获取所有链接。

我试过这种方式:/http:\/\/(.*)[|\s]?/

返回:

array(2) {
  [0] =>
  array(3) {
    [0] =>
    string(42) "http://dvz.local/index/index/regionId/28\r\n"
    [1] =>
    string(77) "http://stuff.kiev.ua/roadmap_page.php http://192.168.3.192/roadmap_page.php\r\n"
    [2] =>
    string(41) "http://192.168.3.192/roadmap_page.php#qwe"
  }
  [1] =>
  array(3) {
    [0] =>
    string(34) "dvz.local/index/index/regionId/28\r"
    [1] =>
    string(69) "stuff.kiev.ua/roadmap_page.php http://192.168.3.192/roadmap_page.php\r"
    [2] =>
    string(34) "192.168.3.192/roadmap_page.php#qwe"
  }
}

编辑1: 预计有:

array(2) {
  [0] =>
  array(3) {
    [0] =>
    string(42) "http://dvz.local/index/index/regionId/28"
    [1] =>
    string(77) "http://stuff.kiev.ua/roadmap_page.php"
    [2] =>
    string(77) "http://192.168.3.192/roadmap_page.php"
    [3] =>
    string(41) "http://192.168.3.192/roadmap_page.php#qwe"
  }
  [1] =>
  array(3) {
    [0] =>
    string(34) "dvz.local/index/index/regionId/28"
    [1] =>
    string(69) "stuff.kiev.ua/roadmap_page.php"
    [2] =>
    string(69) "192.168.3.192/roadmap_page.php"
    [3] =>
    string(34) "192.168.3.192/roadmap_page.php#qwe"
  }
}

4 个答案:

答案 0 :(得分:3)

试试这个:

/http:\/\/([^\s]+)/

答案 1 :(得分:2)

试试这个:

preg_match_all('|http://([^\s]*)|', $string, $matches);

var_dump($matches);

答案 2 :(得分:0)

所有来自文本的链接

http [s]?[^ \ s] *

答案 3 :(得分:0)

许多页面仅具有相对于主文档的相对链接(因此没有http(s):// ...进行解析),对于以下情况,它们可以很好地被<form action="addsurvey.php" method="post"> <input type="text" name="surveyname"> <input type="text" name="question" placeholder="First Question"> <br> <input type="text" name="answer[1]" value=""> <input type="text" name="answer[2]" value=""> <input type="text" name="answer[3]" value=""> <br> <input type="submit" name="submit"> </form> 属性分割:

href

或更简单:

preg_match_all('|href="([^\s]*)"><\/a>|', $html, $output_array);

示例输出:

preg_match_all('|href="(.*?)"><\/a>|', $html, $output_array);