PHP:查找数字虚线子字符串并在修改后替换的模式是什么



我有带有数字短划线子字符串的字符串。我想找到这些子字符串,并在进行一些修改后替换它们。

例如,字符串类似于:

  • 这是字符串编号123-45-6789-0,包含12-34567

现在我想找到数字短划线的子字符串(123-45-6789-012-34567(,并用修改后的子字符串替换它们。例如,最后一个字符串是这样的:

  • 这是修改后的字符串编号0-6789-45-123,包含34567-12

我已经尝试过使用:的preg_match_all(string $pattern, string $subject, array &$matches)

  • $pattern = '/-*d+-*/';

但它给了我一个数字数组,每个数字都有一个破折号,就像这样:

  • $matches = [123-, 45-, 6789-, 0, 12-, 34567]

然而,我想要一个由两个子字符串组成的数组,如下所示:

  • $matches = [0 => 123-45-6789-0, 1 => 12-34567]

以便分别进行修改和替换(使用str_replace()(。

我应该使用哪种模式和方法来实现这些目的?

提前谢谢。

您可以将d+(?:-d+)+正则表达式与preg_replace_callback`函数一起使用:

$str = 'This is the string number 123-45-6789-0 which contains 12-34567.';
echo preg_replace_callback('~d+(?:-d+)+~', function($m) { 
return implode('-', array_reverse(explode('-', $m[0]))); }
,$str);
// => This is the string number 0-6789-45-123 which contains 34567-12.

请参阅PHP演示和regex演示。

d+(?:-d+)+模式与匹配

  • d+-1位以上数字
  • CCD_ 9-1次或多次出现CCD_

$m是一个匹配数组,$m[0]保存匹配值。对于explode,字符串用-拆分,然后数组反转,然后用implode重新连接。

最新更新