2010-06-20 3 views
0

Эта функция не работает:Php preg_replace

function remove_ul($ul) { 
    $ul = preg_replace('/<ul id="general-nav">/', '<ul class="nav">', $ul, 1); 
    $ul = preg_replace('/</ul>/', '<li class="blank"></li></ul>', $ul, 1); 
    return $ul; 
} 

Я думаю, что из-за повторения / на линии с </ul>

Любая идея?

Спасибо.

+0

Читайте о [разделителях] (http://www.php.net/manual/en/regexp.reference.delimiters.php). –

+0

спасибо за ссылку – Happy

ответ

4

Попробуйте заменить это:

$ul = preg_replace('/</ul>/', '<li class="blank"></li></ul>', $ul, 1); 

с:

$ul = preg_replace('/<\/ul>/', '<li class="blank"></li></ul>', $ul, 1); 

Или попробуйте:

$ul = preg_replace('#</ul>#', '<li class="blank"></li></ul>', $ul, 1); 

Потому что в вашем коде, вы указали разделитель / и затем с помощью </ul>, существует конфликт, вам нужно либо выйти из разделителя с помощью \ или использовать # в качестве разделителей.

1

Побег косой черты во втором выражении (/<\/ul>/). Если ваш запрос становится более сложным, вам может понадобиться также группа захвата (круглые скобки).

О, и разбор html с регулярным выражением - это зло. Перед тем, как побег XHTML Regex штурмовал этот пост. :)