web-dev-qa-db-ja.com

正規表現とスラッシュ

正規表現を使用して文字列内のキーワードを検索しています。スラッシュが含まれているキーワード「time/emit」を除いて、すべてのキーワードで正常に機能します。

エスケープするpreg_quote($find,'/')を使用しても、次のメッセージが表示されます。

Unknown modifier 't' in /frontend.functions.php  on line 71

検索パターンを印刷すると、/time\\/emit/と表示されます。 preg_quoteがないと、/time/emit/が表示され、どちらも同じエラーメッセージを返します。

少しでも知識があれば役に立ちます。

18
pixeline

/とは異なる記号で正規表現を開始および終了してみてください

私は個人的に `を使用します

#を使っている人を見たことがあります

ほとんどの文字は良いと思います。あなたはここでそれについてもっと読むことができます: http://pl.php.net/manual/en/regexp.reference.delimiters.php

このような:

 preg_match('#time/emit#', $subject);  // instead of /time/emit/

別の言い方をすれば、あなたの$find変数には、/ time/emit /ではなく#time/Emit#を含める必要があります

40
Kamil Szot

あなたはすでにそれを逃れている何かを持っているように見えます。

preg_quote('time/emit') // returns time\/emit
preg_quote('time\/emit') // returns time\\/emit

ハックとしてあなたは簡単に行うことができます:

preg_quote(stripslashes($find)) // will return time\/emit
2
nathan

これはうまくいくはずです:

$a="Hello////////"; 
$b=str_replace($a,"//","/");
echo $b;
0
John Ostrowick

コードのビット?

その特定の用語の「正規表現」は「/ time/emit /」のようになります。キーワードのセットを使用すると、より効率的な方法がある可能性があるため、何をしているかを確認することをお勧めします。

0
Ian Wood