0

検索置換機能を実行する Web フォームがあります。

フォーム入力は を通過しpreg_quoteます。それでいいんだよ、今まで。

*ここで、ユーザーが(アスタリスク) ワイルドカード文字を入力できるようにしたいと考えています。preg_quoteそれをエスケープします。どうすればそれを許可し、適切に適用できますか?

$find = ',*'; // I want to match a comma and all characters after the comma
$replace = ''; // replace with empty string
                    $find = preg_quote($find_replace[0],'~'); // $find == ',\*';. I want * to remain unescaped. Is replacing "\*" with "*" the best way?
                    if(strpos($find,'\\*') !== false) { // UPDATE: I tried that, and it does work.
                    // $find == ',\*'
                    $find = str_replace('\\*','*',$find);
                    // $find == ',*' -- seems like it should work but doesn't               
                }

                    $value = trim(preg_replace('~' . $find . '~i',$replace,$value));

編集: . の前のエスケープ スラッシュを削除する上記のコードを追加しました*。それは働いています。

' 'で$value = 'Hey, hey, hey, hey'終わりHey hey hey heyます。正規表現パターンで予想されるように、すべてのコンマが削除されます,*(貪欲な一致?)。

私のコードでは、Microsoft Excel の検索/置換機能を使用$find = str_replace('\\*','.*',$find)または複製することに注意してください。$find = str_replace('\\*','[\s\S]*',$find)

4

1 に答える 1

1

私はより良い方法を知りません (何もないと思います...) が、1 つの方法は、preg_quote関数呼び出しの後にアスタリスクの前にあるバックスラッシュを削除することです:

$find = str_replace("\\*", "*", $find);
于 2013-09-11T22:46:01.940 に答える