PHP Regex Pattern,从字符串中删除跨度标签和内部文本

我正在尝试格式化一个字符串数组,以便删除这样的语句:


*<span class="exception">some text</span>

许多这些数组项只是十进制数,但有几个实例包含 html 标签/文本,例如上面的。以下是数组中的一些示例项,以帮助对其进行透视:


'1.5',

'3.7',

'8.0',

'4.2*<span class="exception">some text</span>'

'5.7*<span class="exception">some text</span>random text to keep'

'4.9*<span class="exception">some text</span>8.0'

当我遇到带有 '*some text' 的项目时,我需要完全删除星号、开始和结束跨度标签以及标签内的文本。标签内的文本是完全随机的。附加文本可能跟在 span 标签之后,在这种情况下,我需要保留该文本。


我已经查看了几篇文章,包括以下内容(迄今为止最有帮助的),但仅取得了部分成功:Regex to remove span tags using php


if (substr_count($value, '*<span') > 0) {

  $value = preg_replace('/<span[^>]+\>/', '', $value);

}

此语句去除星号和开始 span 标签,但不去除结束 span 标签或标签之间的文本。


我对正则表达式相当陌生,因此当然感谢任何帮助或建议。


慕侠2389804
浏览 82回答 3
3回答

子衿沉夜

这应该是它.. [*] 匹配 * 字符而 .*> 匹配任何直到 > 字符&nbsp;if (substr_count($value, '*<span') > 0) {&nbsp; &nbsp; &nbsp; $value = preg_replace('/[*].*>/', '', $value);&nbsp; &nbsp; }&nbsp;

人到中年有点甜

如果一切都遵循此模式,则不需要正则表达式,只需在 * 上爆炸并使用第一个元素。foreach( $array as $key => $value ){&nbsp; $array[$key] = explode('*',$value)[0];}您的示例的结果:array(4) {&nbsp; [0]=>&nbsp; string(3) "1.5"&nbsp; [1]=>&nbsp; string(3) "3.7"&nbsp; [2]=>&nbsp; string(3) "8.0"&nbsp; [3]=>&nbsp; string(3) "4.2"}编辑 如果标签后有“其他东西”,则需要多做一些工作$array = [&nbsp; '1.5',&nbsp; '3.7',&nbsp; '8.0*<span class="exception">some text</span>',&nbsp; '4.2*<span class="exception">some text</span>then other stuff'];foreach( $array as $key => $value ){&nbsp; $sub = explode('*',$value);&nbsp; $end = [];&nbsp; if(count($sub) > 1) {&nbsp; &nbsp; $end = explode('>',end($sub));&nbsp; }&nbsp; $array[$key] = trim($sub[0] . ' ' . end($end));}结果:array(4) {&nbsp; [0]=>&nbsp; string(3) "1.5"&nbsp; [1]=>&nbsp; string(3) "3.7"&nbsp; [2]=>&nbsp; string(3) "8.0"&nbsp; [3]=>&nbsp; string(20) "4.2 then other stuff"}
打开App,查看更多内容
随时随地看视频慕课网APP