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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

Смотрите: страница с инструкцией preg_replace

Ответ 4

Try:

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

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