2017-02-13 5 views
1

私は以下の要件を満たしています。preg_replaceで出力文字列にハイフンを保持する方法

入力 ----------:z-edu-l1-^threat -emergency mk pl.jpg

必要 ----:私が使用z-edu-l1-_threat_-emergency_mk_pl.jpg

$input = 'z-edu-l1-^threat -emergency mk pl.jpg'; 

echo strtolower(preg_replace('/\W(?![^.-]*$)/', '_', trim($input))); 

次私は出力を以下の取得

z_edu_l1__threat__emergency_mk_pl.jpg 

- 記号をアンダースコアに置き換えたくありません。 preg_replaceで出力文字列にハイフンを保持するにはどうすればよいですか?

+0

を参照してください? – RomanPerekhrest

+0

@RomanPerekhrestはい特殊文字も削除する必要があります。 – Muk

答えて

3

あなたは​​同等の否定文字クラスに\Wを交換し、あなたが維持するために必要なシンボルを否定することがあります。

[^\w.-] 

regex demo

[^\w.-]マッチ/数字文字でない任意の文字を参照してください。 _,.および-である。

PHP demoを参照してください:

$input = 'z-edu-l1-^threat -emergency mk pl.jpg'; 
echo strtolower(preg_replace('/[^\w.-]/', '_', trim($input))); 
// => z-edu-l1-_threat_-emergency_mk_pl.jpg 
1
$input = "z-edu-l1-^threat -emergency mk pl.jpg"; 
$output = str_replace(["^", " "], "_", $input); 
echo $output; 
//output 
//z-edu-l1-_threat_-emergency_mk_pl.jpg 
+0

このコードスニペットは大歓迎ですが、いくつかの助けを与えるかもしれませんが、* how *と* Why *がこれを解決する(説明があれば大幅に改善されます)(// meta.stackexchange.com/q/114762)問題。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –

1

[^何か]ワット\ {何か} 除いて一致するものを見つける - >アルファベット [^ \ w.-]アルファ以外のものを見つけるだろう、ピリオドとハイフンで囲み、アンダースコアで置き換えます。

$input = 'z-edu-l1-^threat -emergency mk pl.jpg'; 

echo strtolower(preg_replace('([^\w.-])', '_', trim($input))); 

特殊文字も削除しなければならないライブdemo here

+0

あなたの答えをお寄せいただきありがとうございます - あなたの正規表現の説明と、OPの質問を解決する方法は役に立ちます – Tom

+0

これは@WiktorStribiżewの答えとどのように違うのですか? – Toto

+0

@Toto私は彼の答えを見なかった。私は答えるとphpfiddleでそれをテストする間、答えは受信されませんでした。投稿した後で私は答えを見た。 –

関連する問題