我有一些像这样的字符串
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
谢谢你。
答案 0 :(得分:2)
正则表达式:
(Product)\s*(\d+)\s*Pc[.s]?\s*(\d+)
替换字符串:
$1 $2 Price $3
$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