PHP非贪婪匹配,出现重复输出怎么办?(PHP的正则非贪婪匹配)
PHP的正则非贪婪匹配
/正则/U 参数U,用书上的原话是,不再贪婪
php正则匹配出数字重复出现的次数
如果要用正则匹配重复出现的数字还行,但要匹配出现的次数那就不行了,不过你可以用PHP自带的substr_count()函数处理,方法也很简单,比正则更容易。使用方法如下:
<?php
$text = 'This is a test';
echo strlen($text); // 14
echo substr_count($text, 'is'); // 2
// 字符串被简化为 's is a test',因此输出 1
echo substr_count($text, 'is', 3);
// 字符串被简化为 's i',所以输出 0
echo substr_count($text, 'is', 3, 3);
// 因为 5+10 > 14,所以生成警告
echo substr_count($text, 'is', 5, 10);
// 输出 1,因为该函数不计算重叠字符串
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
?>
php 正则表达式 非贪婪匹配
要知道,正则表达式是从字符串的头开始检查匹配的
所以/
具体是这样匹配的
class='a'> 匹配了 "class='a'>" .+? 匹配了 22 <\/span> 匹配了
php过虑html标签的正则表达式preg_replace("/<.+?>/t","",$str);
?是非贪婪匹配的标志,这么说吧
这里的<.+?>由于.是匹配非回车换行的所有字符,需要用?来限制成非贪婪的匹配,可以保证匹配到合适的就不再往后走了,也就是找到第一个>后就不再继续了。
但如果不限制写成<.+>,就是贪婪匹配,一组匹配能匹配多远匹配多远,比如
//-----
\t是制表符。但/<.+?>/t结尾那个不知道啥意思,楼下补充