打印php字符串中第五个<br>之前的字符

问题描述

我需要打印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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...