如何在找到字符串A后仅匹配字符串B的第一次出现

时间:2019-05-07 18:38:17

标签: php regex

我必须在一堆Wordpress页面上使用Regex进行大规模搜索和替换。

我有一个内容块,需要在其中用不同的值替换两个相同的字符串。因此,我需要使用Regex来仅查找和匹配字符串的第一次出现。

到目前为止,我所做的一切都与这两种情况都匹配。这就是我的...试图只匹配某个字符串之后的字符串的第一次出现。但是,以下正则表达式会匹配这两种情况。

(item="Finish")*(8678)

我只希望看到该字符串的第一个匹配项。

https://regexr.com/4di9c

这是源字符串:

[vc_row class="options-tabs-section"][vc_column][vc_tta_tabs active_section="1"][vc_tta_section title="Finish" tab_id="finisha2ec-a4f1"][vc_media_grid element_width="3" item="8678" grid_id="vc_gid:1557243701236-783a77b3-2fb2-8" include="717,716,715,714,713,712,711,709,708,707"][/vc_tta_section][vc_tta_section title="Glass" tab_id="glassa2ec-a4f1"][vc_media_grid element_width="3" item="8656" grid_id="vc_gid:1557243701239-312d0b1e-25cd-9" include="964,972,724,971,969,968,967,966,965"][/vc_tta_section][vc_tta_section title="Handles" tab_id="handlesa2ec-a4f1"][vc_media_grid element_width="3" item="8678" grid_id="vc_gid:1557243701240-a408e67a-7aab-7" include="8661,8667,8660,8664,8665,8663,8662,8668,8666,8669"][/vc_tta_section][/vc_tta_tabs][/vc_column][/vc_row]

编辑:我意识到我在这里可能想得太辛苦了。这就是我所做的,使我得到了所需的答案...可能不需要进行正则表达式。我只是删除了全局标志并逐步进行了操作:

<?php


$input='[vc_row class="options-tabs-section"][vc_column][vc_tta_tabs active_section="1"][vc_tta_section title="Finish" tab_id="finish84e3-bb24"][vc_media_grid element_width="3" item="4566" grid_id="vc_gid:1551131488971-e1d811df-ddaf-8" include="717,716,715,714,713,712,711,709,708,707"][/vc_tta_section][vc_tta_section title="Glass" tab_id="glass84e3-bb24"][vc_media_grid element_width="3" item="174" grid_id="vc_gid:1551131488974-85d653d4-4558-1" include="964,972,724,971,969,968,967,966,965"][/vc_tta_section][vc_tta_section title="Handles" tab_id="handles84e3-bb24"][vc_media_grid element_width="3" item="174" grid_id="vc_gid:1551131488975-8b255d93-ab50-6" include="961,960,959,913,912,911,910,909,908,907"][/vc_tta_section][/vc_tta_tabs][/vc_column][/vc_row]';

$output=preg_replace('/961,960,959,913,912,911,910,909,908,907/', '8661,8667,8660,8664,8665,8663,8662,8668,8666,8669', $input );

$output=preg_replace('/4566/', '8678', $output);
$output=preg_replace('/174/', '8656', $output);
$output=preg_replace('/174/', '8678', $output);

echo $output;
echo "\n";

1 个答案:

答案 0 :(得分:1)

需要更多信息来正确回答您的问题,但是如果您希望匹配首次出现的匹配项并使用the preg_match() PHP function,则可以这样做:

preg_match('/(item="Finish")*(8678)/', $yourString, $matches);
var_dump($matches[0]);

PHPFiddle

根据您的工作,可能无法解决问题,但是大多数PRCE/Regular Expression Functions in PHP将以类似的方式使用类似的参数和功能。