У меня есть регулярное выражение, чтобы найти все числа с процентом (100 | \ d \ d | \ d) \% - это регулярное выражение дано, и мне не разрешено его изменять. У меня есть строки ввода:preg_replace_callback заменяет только первое вхождение
Lorem ipsum 10% dolor, 8%sit amet 50%
мне нужно затем Важнейшие (с HTML-тегами) частью строки в соответствии с этим регулярным выражением, так что я бы получить
Lorem ipsum <i>10%</i> dolor, <i>8%</i>sit amet <i>50%</i>
Поскольку preg_replace будет работать только с регулярным выражением, как (100% | \ d \ d% | \ d%), иначе он выделит только числа 0-100. Я использую preg_replace_callback так:
<?php
$string = "Lorem ipsum 10% dolor, 8%sit amet 50%";
$count = 0;
function foo($matches){
global $count;
return "<i>".$matches[$count++]."</i>";
}
$reg = "/(100|\d\d|\d)\%/";
$str_out = preg_replace_callback($reg, "foo", $string, PREG_PATTERN_ORDER);
?>
Выход это, хотя:
Lorem ipsum <i>10%</i> dolor, 8%sit amet 50%
только первое вхождение заменяется.
Это было бы слишком легко. Как я уже сказал, я не могу изменить регулярное выражение, к сожалению, поэтому мне нужно работать с тем, что у меня есть. Дело в том, что изначально был бы целый файл, полный регулярных выражений. Я возьму их один за другим, проверю их и использую, чтобы процедура была автоматической и работала в целом. – Croolman
[Даже ваше регулярное выражение будет работать здесь с preg_replace] (https://regex101.com/r/mF7uU4/2) – anubhava
Это правда, но он отобрал «%», который мне также нужно выделить. Мое регулярное выражение с preg_replace будет выделять только числа 0-100, как я сказал выше. – Croolman