





Безупречно работает:
<?php
$hay = "ab]cd";
echo eregi_replace("\]", "e", $hay);
?>
Выход:
abecd
\] верен, но обратите внимание, что сам PHP ТАКЖЕ имеет \ в качестве escape-символа, поэтому вам, возможно, придется использовать \\[ (или другой тип строкового литерала).
Проблема может возникнуть из-за того, что вы используете eregi_replace с первым параметром, заключенным в простые кавычки:
'\['
Однако в двойные кавычки он может хорошо работать в зависимости от контекста, поскольку он передается функции изменяет способ параметра (простые кавычки просто передают строку без какой-либо интерпретации, поэтому необходимо удвоить до символа «\»).
Здесь, если "\[" интерпретируется как escape-символ, вам все равно нужно удвоить "\".
Примечание: на основе вашего комментария вы можете попробовать регулярное выражение
<\s*(?:br|p)\s*/?\s*\>\s*\[
для обнаружения [ сразу после <br> или <p>
Я не слежу за вами ... Я использую двойные кавычки в своем коде являюсь, и это не работает.
Я бы сказал наоборот, в одинарных кавычках обратная косая черта - это такой же символ, как и другие, за исключением символов перед обратной косой чертой и одинарной кавычкой, IIRC.
Только что попробовал код Bombe, отлично работает с '\]', '\\]', "\]" и "\\]" ... На самом деле,] не нужно экранировать, если перед ним нет [.
В .Net вы экранируете специальные символы, добавляя обратную косую черту; "\" означает, что он станет; "[" ...
Хотя, поскольку вы обычно делаете это в строковые литералы, вам придется сделать что-то вроде этого;
@"\["
или что-то вроде этого;
"\\["
Извините, тогда я не могу вам помочь :( Хотя синтаксис RegEx в основном должен быть похож ...
Вам не нужно его избегать: если он изолирован, символ] рассматривается как обычный символ. Проверено с помощью eregi_replace и preg_replace.
[это еще один зверь, вы должны убежать от него. Похоже, что одинарные и двойные кавычки, одинарные или двойные escape-последовательности обрабатываются PHP одинаково для обоих семейств регулярных выражений.
Возможно, ваша проблема в другом месте вашего выражения, вы должны дать ее полностью.
Это можно сделать двумя способами:
/ [\]] /x;
/ \] /x;
Хотя вы можете рассматривать последний как лучший вариант, и действительно, я бы подумал об использовании его в более простых регулярных выражениях. Я бы рассмотрел первый вариант, лучший вариант для регулярных выражений большего размера. Учтите следующее:
/ (\w*) ( [\d\]] ) /x;
/ (\w*) ( \d | \] ) /x;
В этом примере я предпочитаю первое решение. Он лучше объединяет отдельные объекты, каждая из которых может совпадать в заданном месте. Это также может иметь некоторые преимущества в скорости, в зависимости от реализации.
Примечание: это в синтаксисе Perl, отчасти для обеспечения правильного выделения.
В PHP вам может потребоваться удвоить обратную косую черту."[\\]]" и "\\]"
Я на самом деле пытаюсь сопоставить что-то, что находится либо в новой строке (или в новой строке html - тоже может быть сразу после <p>), у которой есть @ в начале без ничего перед ним ...