2015-03-03 3 views
2

У меня есть регулярное выражение, чтобы найти все числа с процентом (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% 

только первое вхождение заменяется.

ответ

0

Вы можете использовать preg_replace также:

$reg = '/(100|\d\d|\d)%/'; 
$repl = preg_replace($reg, '<i>$0</i>', $input); 

RegEx Demo

+0

Это было бы слишком легко. Как я уже сказал, я не могу изменить регулярное выражение, к сожалению, поэтому мне нужно работать с тем, что у меня есть. Дело в том, что изначально был бы целый файл, полный регулярных выражений. Я возьму их один за другим, проверю их и использую, чтобы процедура была автоматической и работала в целом. – Croolman

+0

[Даже ваше регулярное выражение будет работать здесь с preg_replace] (https://regex101.com/r/mF7uU4/2) – anubhava

+0

Это правда, но он отобрал «%», который мне также нужно выделить. Мое регулярное выражение с preg_replace будет выделять только числа 0-100, как я сказал выше. – Croolman

Смежные вопросы