PHP预匹配与正则表达式

PHP预匹配与正则表达式,php,regex,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); ec

我是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;

    }
}
$data='1!'
';

preg\u match\u all('/\要从链接中提取主题号,可以使用以下正则表达式

正则表达式:
主题,(\d+(\。\d+*)\.html

解释:我所做的是提供您到regex的链接,并提取
主题、
之间的编号


您可以使用以下方法:

$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
$re=“/topic,(?'topic'\\d+/”;
$str=”“;
预匹配($re,$str,$matches);
echo$matches['topic'];
这将输出:

40500

我在这里使用的
(?'topic'\\d+
是一个命名组。它允许您使用您使用的名称从匹配中检索数据(这里
topic

如果您需要进行现场测试,这很好。

尝试以下解决方案:

$data='';
preg_match_all('/topic,(.*?\...*\.html/s',$data,$match);
echo$match[1][0];//输出:40500

你的正则表达式看起来不必要的复杂。为什么不仅仅是
\/topic\,(\d+)\(\d+)\.html
?你说的是有问题的
40500
。但是在你的尝试中,你也试图匹配
点之后的数字。哪一个是正确的?@apokryfos:
\(\d+)
部分应该是可选的,或者是多个。试试
(\.\d+)*
。因为可能会有像
123.0.02
这样的数字。regex不是解析html的工具,请使用专门为其设计的
DOMDocument
,并最终
parse\u url
来获取路径。谢谢大家,但首先我想获得$data,主题为“test\u curl”的preg\u match\u all固定主题就像我在第4行中的代码一样,Hey Thomas,你能不能建议我参考链接,从那里我可以了解正则表达式,因为我不理解它。我想OP对他想要匹配的数字类型感到困惑。因为他的尝试表明他也想匹配
。@RK12:是一个很好的开始。非常感谢Thomas和noob:)非常感谢您为主题编号所做的工作。但第一步我想找到主题的主题,如“test\u curl”,以获取链接url,如$data,第二步获取主题编号,请使用preg\u match\u all帮助获取>
$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