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

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

Я на самом деле пытаюсь сопоставить что-то, что находится либо в новой строке (или в новой строке html - тоже может быть сразу после <p>), у которой есть @ в начале без ничего перед ним ...

aalaap 08.12.2008 15:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
23
1
82 322
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Безупречно работает:

<?php
    $hay = "ab]cd";
    echo eregi_replace("\]", "e", $hay);
?>

Выход:

abecd
Ответ принят как подходящий

\] верен, но обратите внимание, что сам PHP ТАКЖЕ имеет \ в качестве escape-символа, поэтому вам, возможно, придется использовать \\[ (или другой тип строкового литерала).

Проблема может возникнуть из-за того, что вы используете eregi_replace с первым параметром, заключенным в простые кавычки:

 '\['

Однако в двойные кавычки он может хорошо работать в зависимости от контекста, поскольку он передается функции изменяет способ параметра (простые кавычки просто передают строку без какой-либо интерпретации, поэтому необходимо удвоить до символа «\»).

Здесь, если "\[" интерпретируется как escape-символ, вам все равно нужно удвоить "\".

Примечание: на основе вашего комментария вы можете попробовать регулярное выражение

<\s*(?:br|p)\s*/?\s*\>\s*\[

для обнаружения [ сразу после <br> или <p>

Я не слежу за вами ... Я использую двойные кавычки в своем коде являюсь, и это не работает.

aalaap 08.12.2008 15:30

Я бы сказал наоборот, в одинарных кавычках обратная косая черта - это такой же символ, как и другие, за исключением символов перед обратной косой чертой и одинарной кавычкой, IIRC.

PhiLho 08.12.2008 15:38

Только что попробовал код Bombe, отлично работает с '\]', '\\]', "\]" и "\\]" ... На самом деле,] не нужно экранировать, если перед ним нет [.

PhiLho 08.12.2008 15:50

В .Net вы экранируете специальные символы, добавляя обратную косую черту; "\" означает, что он станет; "[" ...

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

@"\["

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

"\\["

Извините, тогда я не могу вам помочь :( Хотя синтаксис RegEx в основном должен быть похож ...

Thomas Hansen 08.12.2008 22:45

Вам не нужно его избегать: если он изолирован, символ] рассматривается как обычный символ. Проверено с помощью eregi_replace и preg_replace.

[это еще один зверь, вы должны убежать от него. Похоже, что одинарные и двойные кавычки, одинарные или двойные escape-последовательности обрабатываются PHP одинаково для обоих семейств регулярных выражений.

Возможно, ваша проблема в другом месте вашего выражения, вы должны дать ее полностью.

Это можно сделать двумя способами:

/ [\]] /x;

/  \]  /x;

Хотя вы можете рассматривать последний как лучший вариант, и действительно, я бы подумал об использовании его в более простых регулярных выражениях. Я бы рассмотрел первый вариант, лучший вариант для регулярных выражений большего размера. Учтите следующее:

/ (\w*) (  [\d\]] ) /x;

/ (\w*) ( \d | \] ) /x;

В этом примере я предпочитаю первое решение. Он лучше объединяет отдельные объекты, каждая из которых может совпадать в заданном месте. Это также может иметь некоторые преимущества в скорости, в зависимости от реализации.

Примечание: это в синтаксисе Perl, отчасти для обеспечения правильного выделения.
В PHP вам может потребоваться удвоить обратную косую черту."[\\]]" и "\\]"

Другие вопросы по теме