Подтвердить что ты не робот

Как мне сопоставить литерал с квадратной скобкой с помощью RegEx?

Какое регулярное выражение соответствует квадратной скобке? Я использую \\] в шаблоне в eregi_replace, но, похоже, он не может найти ]...

4b9b3361

Ответ 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 вы избегаете специальных символов, добавляя обратную косую черту; "\" означает, что это станет; "["...

Хотя, поскольку вы обычно делаете это в строковых литералах, вам нужно либо сделать что-то подобное:

@"\["

или что-то вроде этого;

"\\["