大括弧に一致する正規表現は何ですか? \\]
のパターンでeregi_replace
を使用していますが、]
...を見つけることができないようです。
\]
は正しいですが、PHP自体にもエスケープ文字として\
があるため、\\[
(または別の種類の文字列リテラル)。
完璧に動作します:
<?php
$hay = "ab]cd";
echo eregi_replace("\]", "e", $hay);
?>
出力:
abecd
エスケープする必要はありません。孤立した場合、]は通常の文字として扱われます。
eregi_replaceとpreg_replaceでテスト済み。
[別の獣です、あなたはそれを脱出する必要があります。一重引用符と二重引用符のように見え、単一または二重のエスケープは、両方の正規表現ファミリーで、PHPによってすべて同じように扱われます。
多分あなたの問題はあなたの表現の他の場所にあります、あなたはそれを完全に与えるべきです。
これには2つの方法があります。
/ [\]] /x;
/ \] /x;
後者をより良いオプションと考えるかもしれませんが、実際には、より単純な正規表現で使用することを検討します。私は前者、より大きな正規表現のためのより良いオプションを検討します。以下を検討してください。
/ (\w*) ( [\d\]] ) /x;
/ (\w*) ( \d | \] ) /x;
この例では、前者が私の推奨ソリューションです。個別のエンティティを組み合わせるというより良い仕事をします。エンティティはそれぞれ、指定された場所で一致する場合があります。また、実装によっては、速度が向上する場合があります。
注:これはPerl構文に含まれていますが、一部は適切に強調表示されます
In PHPバックスラッシュを2倍にする必要があるかもしれません。"[\\]]"
および"\\]"
問題は、最初のパラメーターを単純な引用符で囲んでeregi_replaceを使用しているという事実に起因している可能性があります。
'\['
二重引用符 では、 パラメータを変更する方法 が関数に渡されるため、コンテキストに応じてうまく機能する可能性があります(単純な引用符は文字列を渡さずに渡すだけです)解釈。したがって、「\」文字を2倍にする必要があります。
ここで、"\["
がエスケープ文字として解釈される場合でも、「\」を2倍にする必要があります。
注:コメントに基づいて、正規表現を試すことができます
<\s*(?:br|p)\s*\/?\s*\>\s*\[
[
または<br>
の直後に<p>
を検出するため
.Netでは、バックスラッシュを追加して特殊文字をエスケープします。 「\」はそれがなることを意味します。 「[」...
ただし、通常はstring literalsでこれを行うので、次のようにする必要があります。
@"\["
またはこのようなもの;
"\\["