#php #regex #preg-replace
#php #регулярное выражение #preg-заменить
Вопрос:
Я пытаюсь отсортировать все числа в строке (числа, за которыми следует знак%) в тегах span
Вот несколько попыток новичка в регулярных выражениях решить эту проблему:
$str = preg_replace("/(1-9 )%/", "<span>$1</span>", $str);
или
$str = preg_replace("/([1-9] )%/", "<span>$1</span>", $str);
Ничего не заменяется
Бьюсь об заклад, я все понял неправильно.. Мне нужно больше изучать regex, я знаю
Но можете ли вы помочь мне с этим дальше?
Комментарии:
1. Второй вариант правильный. Вам придется подробнее остановиться на вашем использовании, контексте кода, вводе и выводе (вы действительно просматривали исходный код результата страницы?) чтобы получить какие-либо рекомендации.
2. Да, я пробовал просмотреть исходный код. Я также попытался строго установить $ str как «привет, 100% привет», чтобы посмотреть, изменило ли это что-нибудь. Ничего не заменяется
3. Действительно ли второе правильно? Это казалось довольно случайным / неправильным, когда я это писал (просто написал то, что, по моему мнению, было бы нормально)
4. Второй неверен
Ответ №1:
Ваше регулярное выражение почти правильное, но есть один важный сбой. Вы сопоставляете [1-9]
вместо [0-9]
.
РЕДАКТИРОВАТЬ: Использование preg_replace_callback
для генерации случайного числа:
Следующее должно сработать:
echo preg_replace_callback('/([0-9] )%/', function ($m) {
return '<span>' . rand($m[1]-5, $m[1] 5) . '%</span>'; }, 'hello 100% hello');
Комментарии:
1. Да, я тоже обнаружил некоторые недостатки (см. Мой ответ)
2. Не имеет значения, помещаю ли я% внутрь или снаружи)?
3. Если вы не хотите, чтобы
%
в результирующейspan
строке было что-то не так, оставьте это вне соответствующей группы.4. Хорошо, спасибо. Мне также нужно заменить число случайным числом, которое составляет от -5 до 5 от исходного числа. Есть ли быстрый и простой способ сделать это внутри preg_replace?
5. Вау, это потрясающе. И сложный (для меня). Большое вам спасибо 🙂 Я постараюсь извлечь из этого урок. Мне просто нужно было добавить знак% в span
Ответ №2:
Попробовав еще немного, это работает:
$str = preg_replace('/[0-9]{1,3}%/', '<span>$0</span>', $str);
Использование () было первой ошибкой. Использование 1-9 вместо 0-9 было другой ошибкой. Использование $ 1 вместо $ 0 было третьей ошибкой (я думаю)
Комментарии:
1. Просто используйте
([0-9] %)
.