正则表达式在上次出现的特殊字符后删除字符串

时间:2017-09-28 07:43:02

标签: php regex

我想使用正则表达式在最后一次出现时删除一些特殊符号之后的字符串。即我有字符串

Hello, How are you ? this, is testing

然后我需要这样的输出

Hello, How are you ? this

因为这些将是我的特殊符号, : : |

2 个答案:

答案 0 :(得分:3)

当正常的字符串操作完全正常时,为什么还要使用正则表达式呢? 编辑;注意到字符串中:,的行为方式不正确 这段代码将循环所有字符,看看哪个是最后的,并在那里子串。如果没有" chars"它会将$ pos设置为字符串全长(输出满$ str)。

$str = "Hello, How are you ? this: is testing";
$chars = [",", "|", ":"];
$pos =0;
foreach($chars as $char){
    if(strrpos($str, $char)>$pos) $pos = strrpos($str, $char);
}
if($pos == 0) $pos=strlen($str);
echo substr($str, 0, $pos);

https://3v4l.org/XKs2Z

答案 1 :(得分:1)

使用正则表达式将字符串(通过特殊字符)拆分为数组并删除数组中的最后一个元素:

<?php
$string = "Hello, How are you ? this, is testing";
$parts = preg_split("#(\,|\:|\|)#",$string,-1,PREG_SPLIT_DELIM_CAPTURE);
$numberOfParts = count($parts);
if($numberOfParts>1) {
    unset($parts[count($parts)-1]); // remove last part of array
    $parts[count($parts)-1] = substr($parts[count($parts)-1], 0, -1); // trim out the special character
}
echo implode("",$parts);
?>