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

Find and replace specific numbers from string

如果你有这个字符串(来自 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>';

您可以使用 preg_replace。请确保您替换的是第 1 组匹配项而不是整个匹配项,但 this pattern 会按照您的需要执行。

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