如何替换动态字符串?

时间:2012-10-02 20:00:19

标签: php regex

我有变量$menu类型数组,如下所示:

$menu = array('<li class="page_item page-item-155">',
              '<li class="page_item page-item-49">',
              '<li class="page_item page-item-72">',
              '<li class="page_item page-item-18">',
              '<li class="page_item page-item-50">');

我想替换第一个原始字符串

<li class="page_item page-item-155">'

<li class="current">

在字符串的末尾,它可以是任何数字,数字不是常数。

我想我需要使用正则表达式,但我不知道如何实现它。

$menu = str_replace($original_strs_array, $replacement_strs_array, $menu);

我该怎么做?感谢。

2 个答案:

答案 0 :(得分:2)

代码

所有$ menu值:用class =“current”

替换class =“*”
$menuA = preg_replace('~class=".+"~', 'class="current"', $menu);
print_r($menuA);

所有$ menu值:将className“current”添加到当前类

$menuB = preg_replace('~class="(.+?)"~', 'class="$1 current"', $menu);
print_r($menuB);

选择菜单:将class =“*”替换为class =“current”

$menuC = preg_replace('~class=".*?page-item-'.$selectedMenuId.'"~', 'class="current"', $menu);
print_r($menuC);

选择菜单:将className“current”添加到当前类

$menuD = preg_replace('~class="(.*?)page-item-('.$selectedMenuId.')"~', 'class="$1page-item-$2 current"', $menu);
print_r($menuD);

输出

$menuA = Array
(
    [0] => <li class="current">
    [1] => <li class="current">
    [2] => <li class="current">
    [3] => <li class="current">
    [4] => <li class="current">
)
$menuB = Array
(
    [0] => <li class="page_item page-item-155 current">
    [1] => <li class="page_item page-item-49 current">
    [2] => <li class="page_item page-item-72 current">
    [3] => <li class="page_item page-item-18 current">
    [4] => <li class="page_item page-item-50 current">
)
$menuC = Array
(
    [0] => <li class="page_item page-item-155">
    [1] => <li class="page_item page-item-49">
    [2] => <li class="current">
    [3] => <li class="page_item page-item-18">
    [4] => <li class="page_item page-item-50">
)
$menuD = Array
(
    [0] => <li class="page_item page-item-155">
    [1] => <li class="page_item page-item-49">
    [2] => <li class="page_item page-item-72 current">
    [3] => <li class="page_item page-item-18">
    [4] => <li class="page_item page-item-50">
)

答案 1 :(得分:1)

试试这个:

preg_replace('/page_item page-item-\d+/','current',$menu);

或者这是一个通用的类卸妆/替代品:

preg_replace("/class\s*=\s*('|\")[^'\"]*('|\")/",'class="current"',$menu);
相关问题