Php 正则表达式匹配第一个和最后一个标记之间的文本无效
下面是一个例子Php 正则表达式匹配第一个和最后一个标记之间的文本无效,php,regex,Php,Regex,下面是一个例子 $lol = '<p>one</p>two</p>three<p>last</p><div>'; preg_match_all('/^<p>(.*?)<\/p>$/s',$lol,$mats); var_dump($mats); $lol='123last; preg_match_all('/^(.*?$/s',$lol,$mats); var_dump($mats); 对于上
$lol = '<p>one</p>two</p>three<p>last</p><div>';
preg_match_all('/^<p>(.*?)<\/p>$/s',$lol,$mats);
var_dump($mats);
$lol='123last;
preg_match_all('/^(.*?$/s',$lol,$mats);
var_dump($mats);
对于上面的字符串,我想要像
onetwothreelast
这样的输出,但是对于上面的代码它不起作用。但是当我在最后删除
时,我得到了正确的输出。有人能解释一下原因吗。它不起作用,因为最后没有结束p标记<代码>$表示行尾。如果使用s
修饰符,$
将匹配文件的结尾。并使用*
进行贪婪匹配
preg_match_all('/^<p>(.*)<\/p>/s',$lol,$mats);
\K
在最终打印时放弃先前匹配的字符。因此在这里,已经匹配的字符被丢弃。现在,匹配指针正好位于起始标记的后面。贪婪是必要的,这样op将得到123最后一个
preg_match_all('/^<p>\K.*(?=<\/p>)/s',$lol,$mats);