Я пытаюсь взять строку текста как так:
$string = "This (1) is (2) my (3) example (4) text";
В каждом экземпляре, где существует положительное целое число в круглых скобках, я хотел бы заменить это просто целым числом самим.
Код, который я использую теперь:
$result = preg_replace("\((\d+)\)", "$0", $string);
Но я продолжаю получать a
Разделитель не должен быть алфавитно-цифровым или обратная косая черта.
Предупреждение
Какие-либо мысли? Я знаю, что существуют другие вопросы на здесь таком отвечать на вопрос, но моего знания regex недостаточно для переключения его на этот пример.
Попробуйте:
<?php
$string = "This (1) is (2) my (3) example (4) text";
$output = preg_replace('/\((\d)\)/i', '$1', $string);
echo $output;
?>
Символы в скобках - это специальные символы в регулярном выражении. Вам нужно убежать от них, чтобы использовать их.
1) Вам нужен разделитель, /
работает нормально.
2) Вы должны экранировать символы (
и )
, чтобы он не думал, что это еще одна группировка.
3) Кроме того, заменяемые переменные здесь начинаются с 1, а не с 0 (0 содержит ПОЛНОЕ текстовое совпадение, включая круглые скобки).
$result = preg_replace("/\((\d+)\)/", "\\1", $string);
Что-то вроде этого должно сработать. Если у вас возникнут дополнительные вопросы, обратитесь к документации PHP preg_replace ()
- это действительно хорошо.
Вы почти у цели. Вы используете:
$result = preg_replace("((\d+))", "$0", $string);
preg _ *
семейства функций
, должно быть разделено парой разделителей
. Поскольку вы не используете
никаких разделителей, вы получите эту ошибку. (
и )
- это мета-символы в регулярном выражении,
означающие, что они имеют особое значение.
Поскольку вы хотите сопоставить литерал open
круглые скобки и закрывающие скобки,
вам нужно экранировать их, используя \
.
Все, что следует за \
, обрабатывается
буквально. \ d +
. Но захваченное целое число
будет в $ 1
, а не в $ 0
. $ 0
будет иметь полное совпадение, то есть
целое число в скобках. Если вы сделаете все вышеупомянутые изменения, вы получите:
$result = preg_replace("#\((\d+)\)#", "$1", $string);
Проверьте документы - вам необходимо использовать разделитель до и после ваш шаблон: "/ \ ((\ d +) \) /"
Вы также захотите избежать внешних скобок выше, поскольку они являются литералами, а не вложенной совпадающей группой.