使用PHP和regex,在一组匹配的字符之间插入一个字符

时间:2011-05-10 13:59:21

标签: php regex

我想在一组匹配的字符之间插入一个字符,使用正则表达式来定义组,使用PHP将字符放在匹配中。 Looking here, 我看到它可能需要PHP递归匹配,尽管我想可能有一种更简单的方法。

为了说明,当一个数字旁边有2个或更多字母的组合时,我试图在字符串中插入一个空格。应在字母和数字之间插入空格。示例“AXR900DE3”应返回“AXR 900 DE 3”。

答案是否可以使用preg_split迭代地拆分字符串并沿途插入空格? 我已经开始尝试使用下面的preg_replace作为模式2 +字母后跟一个数字(我还需要使用一个模式,一个数字后跟2 +字母),但我需要另一个步骤来插入该匹配之间的空格

$sku = "AXR900DEF334";
$string = preg_replace('/(?<=[A-Z]{2}[\d])/',' ', $sku);

4 个答案:

答案 0 :(得分:4)

您不需要递归。 如果我理解正确,你应该能够这样做:

$sku = "AXR900DEF334";
$string = preg_replace('/((?<=[A-Z]{2})(?=[0-9])|(?<=[0-9])(?=[A-Z]{2}))/',' ', $sku);
echo $string;

<强>输出

  

AXR 900 DEF 334

当字母在数字前面和后面时,这将匹配。

答案 1 :(得分:1)

试试这个PHP代码:

<?php
$sku = "AXR900DEF334";
$s = preg_replace('/(?<=[A-Z]{2})([\d])/', ' $1', $sku);
var_dump($s);
?>

输出

string(14) "AXR 900DEF 334"

答案 2 :(得分:0)

试试这个:

<?php
$sku = "AXR900DEF334";
$string = preg_replace('/([A-Z]{2,})([\d])/','\1 \2', $sku);
echo "$string\n";
?>

答案 3 :(得分:0)

您可能需要使用两个表达式:

在字符和数字之间添加空格:

$sku = "AXR900DEF334";
$sku = preg_replace('/([A-Z]{2,})([\d])/','\1 \2', $sku);

然后在数字和字符之间添加一个空格:

$sku = preg_replace('/([\d])([A-Z]{2,})/','\1 \2', $sku);