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