2017-09-28 77 views
2

我想用正則表達式在最後一次出現特殊符號後移除字符串。即我有串正則表達式在最後一次出現特殊字符後移除字符串

Hello, How are you ? this, is testing 

然後我需要這樣的

Hello, How are you ? this 

,因爲這些將是我的特殊符號, : : |

+0

分享您的代碼你試過 –

+0

份額正則表達式代碼您試過 –

+0

正則表達式應匹配其中一個特殊符號,後跟任何數量的不在該集合中的字符,然後是字符串結尾。 – Barmar

回答

3

爲什麼用正則表達式的麻煩,在正常的字符串操作是完全沒有輸出?
編輯;注意到字符串中的:,的行爲不正確。
該代碼將循環所有字符,並查看哪個是最後一個字符串。如果完全沒有「字符」,它會將$ pos設置爲字符串full length(輸出完整的$ 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

+0

是的,但我會多個特殊字符 –

+0

對不起,沒有看到。我會更新代碼。 – Andreas

+1

那麼,爲什麼我會陷入低谷? – Andreas

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

請記住,如果字符串中沒有「特殊字符」,則失敗。 https://3v4l.org/oBIlJ – Andreas

+0

非常好的一點感謝你指出。我剛剛編輯了代碼以包含對拆分數組中元素數目的檢查。 –

+0

沒問題。以防萬一你想清除代碼,你可以查找'end()'函數而不是count-1 – Andreas

相關問題