0

私は以下のような可変$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);

どうやってやるの?ありがとう。

4

2 に答える 2

3

コード

すべての$menu値:class="*"をclass="current"に置き換えます

$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">
)
于 2012-10-02T20:25:25.210 に答える
1

これを試して :

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

または、ジェネリッククラスのリムーバー/リプレースメントの場合は次のようになります。

preg_replace("/class\s*=\s*('|\")[^'\"]*('|\")/",'class="current"',$menu);
于 2012-10-02T20:05:11.943 に答える