正则表达式//从<a> link</a>中提取值

时间:2014-11-01 00:48:10

标签: regex curl

我正在尝试提取用户名:

preg_match_all("/\<a href\=\"/Users\/(\D+)\/\"\>(.*)\<\/a\>", $file_content, $matches);

来自以下

<a href="/Users/stackoverflow">stackoverflow</a>

但它没有显示任何内容:(

你能告诉我那里有什么问题吗?

3 个答案:

答案 0 :(得分:0)

您的正则表达式中包含不必要的\/,并且您不需要逃避<>=。所以改变你的正则表达式如下,

<a href=\"/Users\/(\D+?)\">(.*)<\/a>

DEMO

"/\<a href\=\"/Users\/(\D+)\/\"\>(.*)\<\/a\>"
                           ^
                           |

(\D+)转为非捕获组将留下一个组。

<a href=\"/Users\/(?:\D+?)\">(.*)<\/a>

答案 1 :(得分:0)

非常感谢您的帮助和有用的链接:)

这是我的最终代码:

$matches = array();

preg_match_all("<a href=\"/Users\/(\D+?)\">", $file_content, $matches);

foreach($matches[1] as $child) {
   echo $child . "\n";
}

答案 2 :(得分:0)

您的匹配字符串中有正斜杠,而您在尝试匹配的数据中没有正斜杠:

preg_match_all("/\<a href\=\"/Users\/(\D+)\/\"\>(.*)\<\/a\>", $file_content, $matches);
                                           ^

期待:

<a href="/Users/stackoverflow/">stackoverflow</a>

即在href属性的结束引号之前的另一个斜杠,如stackoverflow /&#34;&gt;

所以它永远不会匹配。