Какое регулярное выражение соответствует квадратной скобке? Я использую \\]
в шаблоне в 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 вы избегаете специальных символов, добавляя обратную косую черту; "\" означает, что это станет; "["...
Хотя, поскольку вы обычно делаете это в строковых литералах, вам нужно либо сделать что-то подобное:
@"\["
или что-то вроде этого;
"\\["