我想在一组匹配的字符之间插入一个字符,使用正则表达式来定义组,使用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);
答案 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);