2017-09-28 12 views
2

最後の出現時に特殊記号の後に正規表現を使用して文字列を削除したいと思います。つまり私は、文字列Regexは最後の出現時に特殊文字の後に文字列を削除します

Hello, How are you ? this, is testing 

を持っています、私はこれらのようなこの

Hello, How are you ? this 

のような出力を必要とする通常の文字列操作は完全に罰金ているとき、なぜ正規表現を気に私の特別なシンボル, : : |

+0

シェアあなたのコードあなたが正規表現コード –

+0

シェアをしようとしたものを試しました –

+0

regexpは特殊記号の1つと一致し、その後にそのセットに含まれない文字数が続き、その後に文字列の終わりが続きます。 – Barmar

答えて

3

でしょうか?
EDIT;文字列に:,の両方が正しく動作しないことに気付きました。
このコードはすべての文字をループし、最後の文字と部分文字列を表示します。 "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

+0

はい、複数の特殊文字を入力します –

+0

ごめんなさい。私はコードを更新します。 – Andreas

+1

なぜ私はdownvoted得るのですか? – 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

問題ありません。ちょうどあなたがコードをきれいにしたい場合には、count-1の代わりに 'end()'関数を見ることができます – Andreas

関連する問題