PHP预匹配与正则表达式
我是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
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