为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕侠2389804 2021-08-21 09:34:08
我正在尝试格式化一个字符串数组,以便删除这样的语句:*<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 phpif (substr_count($value, '*<span') > 0) {  $value = preg_replace('/<span[^>]+\>/', '', $value);}此语句去除星号和开始 span 标签,但不去除结束 span 标签或标签之间的文本。我对正则表达式相当陌生,因此当然感谢任何帮助或建议。
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这应该是它.. [*] 匹配 * 字符而 .*> 匹配任何直到 > 字符


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

      $value = preg_replace('/[*].*>/', '', $value);

    } 


查看完整回答
反对 回复 2021-08-21
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

如果一切都遵循此模式,则不需要正则表达式,只需在 * 上爆炸并使用第一个元素。


foreach( $array as $key => $value ){

  $array[$key] = explode('*',$value)[0];

}

您的示例的结果:


array(4) {

  [0]=>

  string(3) "1.5"

  [1]=>

  string(3) "3.7"

  [2]=>

  string(3) "8.0"

  [3]=>

  string(3) "4.2"

}

编辑 如果标签后有“其他东西”,则需要多做一些工作


$array = [

  '1.5',

  '3.7',

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

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

];


foreach( $array as $key => $value ){

  $sub = explode('*',$value);

  $end = [];

  if(count($sub) > 1) {

    $end = explode('>',end($sub));

  }

  $array[$key] = trim($sub[0] . ' ' . end($end));

}

结果:


array(4) {

  [0]=>

  string(3) "1.5"

  [1]=>

  string(3) "3.7"

  [2]=>

  string(3) "8.0"

  [3]=>

  string(20) "4.2 then other stuff"

}


查看完整回答
反对 回复 2021-08-21
  • 3 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信