Регулярное выражение удаляет строку после специальных символов в последнем случае


Я хотел бы использовать регулярное выражение для удаления строки после некоторых специальных символов в последнем случае. т. е. я имею строку

Hello, How are you ? this, is testing

Тогда мне нужен такой вывод

Hello, How are you ? this

Поскольку это будут мои специальные символы , : : |

2   2  

2 ответа:

Зачем беспокоиться о регулярном выражении, когда обычные строковые операции совершенно нормальны?
EDIT; заметил, что он не ведет себя корректно как с :, так и с , в строке.
Этот код зациклит все символы и увидит, какой из них последний, и подстроит его туда. Если нет никаких "символов" вообще, то он установит $pos в строки полной длины (output full $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

Используйте регулярное выражение для разбиения строки (специальными символами) на массив и удаления последнего элемента в массиве:

<?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);
?>