用数字更改 preg 匹配项

Change preg matchess with numbers

我正在尝试通过对匹配项进行排序来用数字替换匹配项,但无法做到。我有一个字符串,单词之间有 {}。我想在没有 foreach 的情况下将它们更改为 1、2、3 等。可以与 preg 匹配所有?

$string = 'sample {} test {} string {}';

这个字符串一定是这样看的: 样本 (0) 测试 (1) 字符串 (2)

这是我的代码:

$string_split = explode('{}', $string);
foreach($string as $string_word){
  $i ++;
  echo $string_word . $i . ' ';
}

您可以使用 preg_match 遍历您的字符串,同时保留一个计数器:

$string = 'sample {} test {} string {}';
$counter = 0;
while (preg_match("/\{\}/", $string)) {
    $string = preg_replace("/\{\}/", "(" . $counter . ")", $string, 1);
    $counter = $counter + 1;
}

echo "\n" . $string;

这会打印:

sample {} test {} string {}
sample (0) test (1) string (2)

我认为正则表达式会很有用。

$re = '/(.*?)\s{}(\s?)/m';
$str = 'sample {} test {} string {}';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result

$new_string = null;
$i = 0;

foreach($matches as $item){
    $new_string .=  $item[1] . ' ('. $i . ') ';
    $i++;
}

echo $new_string;

输出:

sample (0) test (1) string (2) 

使用 preg_replace_callback 的另一个选项,每次替换都会增加计数。

$string = 'sample {} test {} string {}';
$count = 0;
echo preg_replace_callback("~{}~", function($m) use (&$count) {
    return '(' . $count++ . ')';
}, $string);

输出

sample (0) test (1) string (2)

Php demo