查找并替换字符串中的特定数字

时间:2018-07-16 18:43:11

标签: php regex preg-replace

如果您有此字符串(来自xml文件,则包含空格):

    $string = '<wp:postmeta>
        <wp:meta_key><![CDATA[some_field]]></wp:meta_key>
        <wp:meta_value><![CDATA[20]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
        <wp:meta_value><![CDATA[53]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
        <wp:meta_value><![CDATA[431]]></wp:meta_value>
    </wp:postmeta>
</item>';

如何找到每次出现的

<wp:meta_value><![CDATA[xxx]]></wp:meta_value>

但只有在以下情况立即出现时:

<wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>

然后用该行中的数字替换特定内容。

所以最后,字符串看起来像这样:

         $string = '<wp:postmeta>
            <wp:meta_key><![CDATA[some_field]]></wp:meta_key>
            <wp:meta_value><![CDATA[20]]></wp:meta_value>
        </wp:postmeta>
        <wp:postmeta>
            <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
            <wp:meta_value><![CDATA[123456]]></wp:meta_value>
        </wp:postmeta>
        <wp:postmeta>
            <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
            <wp:meta_value><![CDATA[123456]]></wp:meta_value>
        </wp:postmeta>
    </item>';

1 个答案:

答案 0 :(得分:0)

您可以使用preg_replace。确保您要替换第1组比赛而不是整个比赛,但是this pattern会做您需要的事情。

(?<=<wp:meta_key><!\[CDATA\[_thumbnail_id\]\]><\/wp:meta_key>)\s*<wp:meta_value><!\[CDATA\[(\d+)\]\]><\/wp:meta_value>