我试图从字符串中删除一个跨度,并在之前或之后删除其中一个短划线:
1-2-3-<span>4</span>-5-6 => 1-2-3-5-6
但是,跨度可以位于此字符串的任何位置:
<span>1</span>-2-3-4-5-6 => 2-3-4-5-6
1-2-3-4-5-<span>6</span> => 1-2-3-4-5
所以我需要的是一个正则表达式来删除整个范围,包括其中一个破折号(但不是两个),以维护字符串的正确语法(短划线数字)。
这种模式有效,但必须有一种更简单,更好的方式:
'#-<span>[^>]+>|<span>[^>]+>-#'
我感谢任何提示! 皮特
答案 0 :(得分:1)
试试这个:
#-<[^-]+>|<[^-]+>-#
。
它还在工作,而且还小一些!
答案 1 :(得分:0)
如果你想要这样的输出 - 1-2-3-4-5-6
,那么你可以使用strip_tags
方法:
echo strip_tags('<span>1</span>-2-3-4-5-6');
echo strip_tags('1-2-3-<span>4</span>-5-6');
echo strip_tags('1-2-3-4-5-<span>6</span>');
答案 2 :(得分:0)
检查此演示:
使用您在问题中提到的任何输入字符串集,屏幕上会显示所需的答案。
这将涵盖所有情况,其中带数字的跨度可以介于开头或结尾之间。
PHP代码:
<?php
$input = "<span>4</span>-1-2-3-5-6";
$processed1 = preg_replace("/<span>(\d+)<\/span>/", '',$input );
$processed2 = preg_replace("/--/", '-',$processed1);
$processed3 = preg_replace("/^-/", '',$processed2);
$output = preg_replace("/-$/", '',$processed3);
echo $output;
?>