PHP preg_match和正则表达式

时间:2016-03-14 10:03:29

标签: php regex

我是PHP的新手

我正在尝试获取链接的主题编号但不起作用。

echo $topicsave为空。

这是我的代码。

$data = '
<a href="http://forums.inwing.com/index.php/topic,40500.0.html">test_curl</a>
';
preg_match_all('/\<a[^\?]+\/([^\"]+)\.\s*\>test_curl\<\/a\>/', $data, $match);
    echo '<pre>',htmlspecialchars(print_r($match, true)),'</pre>';
    if( count($match[0])){
    foreach($match[1] as $vl){
        preg_match_all('/topic\,([0-9]+\.[0-9]+)/', $vl, $m1);
        if(count($m1[1])) 

           $topicsave = $m1[1][0];
           echo $topicsave;

    }
}

我想获取主题编号40500请帮助我,主题是变量,例如120或253612456

谢谢。

3 个答案:

答案 0 :(得分:1)

要从链接中提取主题编号,您可以使用以下正则表达式。

正则表达式: topic,(\d+(\.\d+)*)\.html

说明:正在做的是提供指向正则表达式的链接,并在topic,.html之间提取数字。

<强> Regex101 Demo

<强> PHP demo on Ideone

答案 1 :(得分:1)

你可以这样做:

$re = "/topic,(?'topic'\\d+)/"; 
$str = "<a href=\"http://forums.inwing.com/index.php/topic,40500.0.html\">test_curl</a>"; 

preg_match($re, $str, $matches);

echo $matches['topic'];

将输出:

  

40500

我在这里使用的(?'topic'\\d+)命名组。它允许您使用您使用的名称(此处为topic)检索匹配中的数据。

如果您需要进行实时测试,Regex 101很棒。

答案 2 :(得分:0)

试试这个解决方案:

$data = '<a href="http://forums.inwing.com/index.php/topic,40500.0.html">test_curl</a>';
preg_match_all('/topic,(.*?)\..*\.html/s', $data, $match);    
echo $match[1][0]; // Output: 40500