PHP с использованием preg_replace: "Ошибка разделителя не должна быть буквенно-цифровой или обратной косой чертой".
Я пытаюсь взять строку текста так:
$string = "This (1) is (2) my (3) example (4) text";
В каждом случае, когда в круглых скобках есть положительное целое число, я хотел бы заменить его просто целым.
Код, который я использую сейчас, это:
$result = preg_replace("\((\d+)\)", "$0", $string);
Но я все время получаю ошибку "Делимитор не должен быть буквенно-цифровой или обратной косой чертой".
Любые мысли? Я знаю, что здесь есть другие вопросы, которые отвечают на вопрос, но моего знания регулярного выражения недостаточно, чтобы переключить его на этот пример.
Ответы
Ответ 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;
?>
Символы скобок представляют собой специальные символы в регулярном выражении. Вам нужно убежать от них, чтобы использовать их.