问题描述
我需要打印PHP字符串中第五个<br>
之前的字符。
例如字符串是:
A silly young Cricket <br>
Accustomed to sing <br><br>
Through warm sunny weather <br>
of winter summer and spring <br><br>
Now that you forget the poem<br>
having memorised it 18 years back in school<br><br>
在以上字符串中,我要打印第五个<br>
之前的字符。输出应为:
A silly young Cricket <br> Accustomed to sing <br><br> Through warm sunny weather <br> of winter summer and spring
我尝试了如下操作,但是它只打印第一行,并且不能按要求工作
<?php
$trer = 'the above string in example';
$arrdr = explode("<br>",$trer,5);
$pichka = array_shift($arrdr);
echo $pichka;
?>
解决方法
如果您不能保证在字符串中总是出现5次<br>
,这是一个更灵活的非正则表达式解决方案,它将为您提供一切,最多可能出现5次:
$split = array_map(function ($part) {
return implode('<br>',$part);
},array_chunk(explode('<br>',$str),5));
$output = array_shift($split);
尚不清楚,如果少于5个,是否要保留任何尾随<br>
,但是如果要始终在<br>
前结束字符串,则可以通过添加来确保将它们删除最后一行:
$output = preg_replace('/(<br>)+$/s','',$output);
,
一种正则表达式方法是使用惰性点谨慎地仅匹配前五个<br>
标签:
$input = "A silly young Cricket <br> \nAccustomed to sing <br><br> \nThrough warm sunny weather <br>\nof winter summer and spring <br><br>\nNow that you forget the poem<br>\nhaving memorised it 18 years back in school<br><br>";
preg_match("/^.*?<br>.*?<br>.*?<br>.*?<br>.*?(?=<br>)/s",$input,$matches);
print_r($matches[0]);
此打印:
A silly young Cricket <br>
Accustomed to sing <br><br>
Through warm sunny weather <br>
of winter summer and spring
请注意,在正则表达式模式中,我使用/s
开关以全点模式进行匹配,以便.*
在换行符之间进行匹配。
正如我在您的字符串中看到的那样,您在某些行中有两个br标签,并且用它爆炸您分割的字符串,这可能对您造成问题
尝试一下,让我知道结果:
$string = 'A silly young Cricket <br>
Accustomed to sing <br><br>
Through warm sunny weather <br>
of winter summer and spring <br><br>
Now that you forget the poem<br>
having memorised it 18 years back in school<br><br>';
$needles = explode(chr(10),$needles,5);
print_r($needles);
“ chr(10)”函数返回\ n字符。您可以直接使用\ n