PHP с использованием preg_replace: «Ошибка разделителя не должна быть буквенно-цифровой или обратной косой чертой».

Я пытаюсь взять строку текста так:

$string = "This (1) is (2) my (3) example (4) text"; 

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

Код, который я использую сейчас:

 $result = preg_replace("\((\d+)\)", "$0", $string); 

Но я продолжаю получать ошибку «Делимитор не должен быть буквенно-цифровой или обратной косой чертой».

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

Solutions Collecting From Web of "PHP с использованием preg_replace: «Ошибка разделителя не должна быть буквенно-цифровой или обратной косой чертой»."

Вы почти там. Ты используешь:

 $result = preg_replace("((\d+))", "$0", $string); 
  • preg_* выражение, которое вы указываете как первый аргумент для семейства preg_* должно быть разграничено в паре разделителей. Поскольку вы не используете какие-либо разделители, вы получаете эту ошибку.
  • ( и ) являются метасимволами в регулярном выражении, что означает, что они имеют особое значение. Поскольку вы хотите сопоставить буквенную открытую скобку и закрывать круглые скобки, вам нужно сбежать от них с помощью \ . Любое последующее \ обрабатывается буквально.
  • Вы можете правильно захватить целое число с помощью \d+ . Но захваченное целое число будет в $1 а не $0 . $0 будет иметь полное совпадение, то есть целое число в скобках.

Если вы сделаете все перечисленные выше изменения, вы получите:

 $result = preg_replace("#\((\d+)\)#", "$1", $string); 

1) У вас должен быть делимметр, «/» отлично работает.

2) Вы должны избегать символов '(' и ')', чтобы он не думал, что это другая группировка.

3) Кроме того, переменные замены здесь начинаются с 1, а не 0 (0 содержит FULL текстовое совпадение, которое будет включать круглые скобки).

 $result = preg_replace("/\((\d+)\)/", "\\1", $string); 

Что-то вроде этого должно работать. Любые дополнительные вопросы, перейдите к документации PHP preg_replace() – это действительно хорошо.

Проверьте документы – вам нужно использовать разделитель до и после вашего шаблона: "/\((\d+)\)/"

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

См. Страницу руководства preg_replace

Пытаться:

 <?php $string = "This (1) is (2) my (3) example (4) text"; $output = preg_replace('/\((\d)\)/i', '$1', $string); echo $output; ?> 

В скобках указаны специальные символы в регулярном выражении. Вам нужно убежать от них, чтобы использовать их.