Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式可以替换字符的前面或后面,但不能同时替换两者_Php_Regex - Fatal编程技术网

Php 正则表达式可以替换字符的前面或后面,但不能同时替换两者

Php 正则表达式可以替换字符的前面或后面,但不能同时替换两者,php,regex,Php,Regex,我正在尝试从字符串中删除一个span以及前后的一个破折号,如下所示: 1-2-3-<span>4</span>-5-6 => 1-2-3-5-6 1-2-3-4-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 1-2

我正在尝试从字符串中删除一个span以及前后的一个破折号,如下所示:

1-2-3-<span>4</span>-5-6   => 1-2-3-5-6
1-2-3-4-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
1-2-3-4-5-6=>2-3-4-5-6
1-2-3-4-5-6   => 1-2-3-4-5
因此,我需要一个正则表达式来删除整个跨度,包括一个破折号(但不是两个破折号),以保持字符串的正确语法(破折号分隔的数字)

这种模式有效,但必须有一种更简单、更好的方法:

'#-<span>[^>]+>|<span>[^>]+>-#'
“#-[^>]+>|[^>]+>-#”
谢谢你给我任何提示!
Pete

如果您想要这样的输出-
1-2-3-4-5-6
,那么您可以使用
strip\u 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>');
echo strip_标签('1-2-3-4-5-6');
回波条标签(“1-2-3-4-5-6”);
回波条标签(“1-2-3-4-5-6”);
查看此演示:

使用你们在问题中提到的任何一组输入字符串,你们想要的答案就会出现在屏幕上

这将涵盖带有数字的跨度可以介于两者之间、开始时或结束时的所有情况

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;



?>

试试这个:

#-|-#


它仍然在工作,而且有点小

博宾斯在3。。。2.1…这可能对您有所帮助-
echo strip_标签('1-2-3-4-5-6')这个怎么样<代码>#-|-#
。它仍在工作,而且有点小@乔治安-这是正确的,但OP只是想删除span标签,我想。请检查我的答案也,它的工作!我想完全删除跨度中的数字。因此,从这个字符串:
1-2-3-4-5-6
我希望得到这样的结果:
2-3-4-5-6
@Peter上述示例的输出是什么。@AvinashRaj我将所需的输出添加到原始问题中。普拉瓦:是的,在regex buddy中测试过。此模式匹配破折号后跟一个跨距或跨距后跟一个破折号。我不是一个大风扇或如果大多数模式是相同的。非常好的表达!但仍然不是我想要的,因为它具有我试图避免的条件:/这确实有效,但我正在寻找最好、性能最好的解决方案(一行,regex尽可能短)。我在最初的帖子中发布了一个有效的正则表达式,它已经很短了,但在我看来并不完美,因为它包含了OR和重复模式。