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