1

カスタム文字のエスケープを行いたいのですが、その特殊文字がまだ前に付いていない場合にのみ、一部の文字の前に特殊文字を付ける必要があります。正規表現の置き換えが必要になると思います。それを達成する最も簡単な方法は何ですか?私は否定的な後読みアサーションで何かを試しましたが、結局何もありませんでした。

abc編集: chars のいずれかを でエスケープしたいと想像し\debbyください。この例はそれほど創造的ではないと思いますが、それでも私が言いたいことを説明していると思います(まだエスケープされていないエスケープ文字)de\b\byda\bbyd\a\b\by

EDIT2:まあ、私が実際にやろうとしているのは、

([A-Za-z]+)/([A-Za-z]+)/([A-Za-z]+)

の中へ

([A-Za-z]+)\/([A-Za-z]+)\/([A-Za-z]+)

文字列番号1のスラッシュは、たとえば、ある種の区切り文字です(後でもっと多くのスラッシュが必要になると思いますが、同時にエスケープしたい.,思います)、それ\を使用するにはエスケープする必要があります別の(より単純な)パターン。私は試しました(2番目の引数についてはわかりませんが、それは私が信じている問題ではありません)

preg_replace("/(?<!\\)([\/])/", "\\$0", $string);

はどこ$stringですか([A-Za-z]+)/([A-Za-z]+)/([A-Za-z]+)。運がない。

私は今それを明確にしたことを願っています

解決:

preg_replace("/(?<!\\\\)[\/]/", "\\\\$0", $string);角括弧内に、エスケープする文字を入れます。

4

1 に答える 1

5

これを行うための使いやすい関数を作成しました。任意の文字または文字列で任意の文字セットをエスケープします。また、将来エスケープする文字やエスケープ シーケンスを変更する予定がある場合も簡単になります。

function escapeChars($charsToEscape, $escapeSeq, $string)
{
    $charsToEscape = preg_quote($charsToEscape, '/');
    $regexSafeEscapeSeq = preg_quote($escapeSeq, '/');
    $escapeSeq = preg_replace('/([$\\\\])/', '\\\$1', $escapeSeq);
    return(preg_replace('/(?<!'.$regexSafeEscapeSeq.')(['.$charsToEscape.'])/', $escapeSeq.'$1', $string));
}

パラメータ

$charsToEscape : エスケープする文字

  • 「a」は「a」だけをエスケープします
  • 「abc」は「a」、「b」、「c」をエスケープします

$escapeSeq : エスケープ シーケンス文字/文字列

  • 任意の文字または文字列を指定できます。例: 「/」、「#」、「$」、「$#/」、「$$$」、「a」、「こんにちは」など。

  • '\' をエスケープ シーケンスとして使用するには、'\\' を指定します

  • '\\' の場合は '\\\\' を指定します。これは、php が別の "\" の前にある '\' または " ' " (一重引用符で文字列を定義する場合) または ' " ' (文字列を二重引用符で定義する場合) と見なすためです。引用符) エスケープ シーケンスとして

$string : 文字をエスケープする文字列

特定のケースでは、使用します

$string = '([A-Za-z]+)/([A-Za-z]+)/([A-Za-z]+)';    
echo escapeChars('/', '\\', $string);
于 2013-08-08T23:24:39.360 に答える