2010-12-04 2 views
0

У меня есть это:preg_replace между> и <

<div> 16</div> 

и я хочу это:

<div><span>16</span></div> 

В настоящее время это единственный способ, которым я могу заставить его работать:

preg_replace("/(\D)(16)(\D)/", "$1<span>$2</span>$3", "<div> 16</div>")

Если я оставлю 3 доллара, я получаю:

<div><span>16</span>/div> 
+1

И проблема с вашим решением? – 2010-12-04 17:43:39

+0

Каков общий вопрос? Как написано: `if ($ foo == '

16
') $ foo = '
16
';` является допустимым решением. – Matthew 2010-12-04 18:29:10

+0

Я просто не думал, что мое решение было очень хорошим, и, конечно, я нашел ситуацию, когда он не работает. И я исправлю порядок параметров, потому что, как указано ниже, неверны. – Kevin 2010-12-04 22:28:00

ответ

1

Попробуйте следующее -

$str = "<div class=\"number\"> 16</div>"; 
$formatted_str = preg_replace("/(<div\b[^>]*>)(.*?)<\/div>/i", "$1<span>$2</span></div>", $s); 
echo $formatted_str; 
2

Я думаю, что ты хотел сказать, что вы используете следующие:

print preg_replace("/(\\D+)(16)(\\D+)/", "$1<span>$2</span>$3", "<div>16</div>"); 

Там нет ничего плохого. $ 3 будет содержать все, что соответствует во второй (\ D +) группе. Если вы оставите это, очевидно, это не будет волшебно появляться.

Обратите внимание, что ваш код в вопросе были некоторые ошибки:

  1. Вы должны избежать ваших \ «S в строке.
  2. Для соответствия нескольким символам необходимо использовать \D+.
  3. У вас есть пространство до 16 в вашей строке, но вы не учитываете это в своем регулярном выражении. Я удалил пробел, но если вы хотите разрешить его, вы должны использовать \s* для соответствия любому количеству пробельных символов.
  4. Неверный параметр.
3

Не совсем уверен, что ваш после, но следующий более общий:

$value = "<div> 16 </div>"; 
echo(preg_replace('%(<(\D+)[^>]*>)\s*([^\s]*)\s*(</\2>)%', '\1<span>\3</span>\4', $value)); 

Что бы привести:

<div><span>16</span></div> 

Даже если значение было:

<p> 16 </div> 

Это приведет к:

<p><span>16</span></p> 
0

Это то, что в конечном итоге работает лучший:

preg_replace('/(<.*>)\s*('. $page . ')\s*(<.*>)/i', "$1" . '<span class="curPage">' . "$2" . '</span>' . "$3", $pagination) 

То, что я обнаружил, что я не знаю точно, какие теги будут предшествовать или следовать номер страницы.

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