PHP Regex使用preg_replace切断空间

时间:2014-09-27 11:42:11

标签: php regex preg-replace

我有一些像这样的字符串

Name xxx Product 1 Pc 100
Name Pci Product2Pc.200
Name Pcx Product 3 Pcs300

我想将PC转为Price 这是我想要的结果

Name xxx Product 1 Price 100
Name Pci Product 2 Price 200
Name Pcx Product 3 Price 300

起初我使用

$pattern = array('/(\s*)Product(\s*)/', '/(\s*)(Pc\.?|Pcs)(\s*)/');

但它将我的所有PC改为Price

Name xxx Product 1 Price 100
Name Price i Product 2 Price 200
Name Price x Product 3 Price 300

这是我现在的代码。

$pattern = array('/(\s*)Product(\s*)/', '/[^a-z](Pc\.?|Pcs)[^a-z]/');
$replacement = array(' Product ', ' Price ');
$title = preg_replace($pattern, $replacement, $title, -1);

但结果是这样的

Name xxx Product 1 Price 100
Name Pci Product Price 00
Name Pcx Product 3 Price 00

谢谢你。

2 个答案:

答案 0 :(得分:2)

正则表达式:

(Product)\s*(\d+)\s*Pc[.s]?\s*(\d+)

替换字符串:

$1 $2 Price $3

DEMO

$string = <<<EOT
Name xxx Product 1 Pc 100
Name Pci Product2Pc.200
Name Pcx Product 3 Pcs300
EOT;
$pattern = "~(Product)\s*(\d+)\s*Pc[.s]?\s*(\d+)~";
echo preg_replace($pattern, "$1 $2 Price $3", $string);

输出:

Name xxx Product 1 Price 100
Name Pci Product 2 Price 200
Name Pcx Product 3 Price 300

答案 1 :(得分:1)

您尝试不起作用的原因是因为您正在删除您不想要的内容。

您可以使用以下正则表达式。

$title = <<<DATA
Name xxx Product 1 Pc 100
Name Pci Product2Pc.200
Name Pcx Product 3 Pcs300
DATA;

$title = preg_replace('/Product\K\s*(\d+)\D+(\d+)/', ' $1 Price $2', $title);
echo $title;

输出:

Name xxx Product 1 Price 100
Name Pci Product 2 Price 200
Name Pcx Product 3 Price 300