PHP 如何使用 preg_match 精确匹配字符串中的数字和符号?
PHP How to match exact numbers and symbols in a string using preg_match?
我正在解析一些数据并针对我的网站对其进行标准化。
我解析得到的数据:
[sizes] => Array
(
[0] => 5
[1] => 6
[2] => 10
[3] => 6+
[4] => 7
[5] => 7+
[6] => 8
[7] => 8+
[8] => 9
)
我需要得到:
[0] => US - 5
[1] => US - 6
[2] => US - 10
[3] => US - 6.5
[4] => US - 7.5
[5] => US - 8.5
我尝试了 preg_replace(各种不同的变体)和 str_replace,但似乎没有任何效果。它似乎覆盖了值:
$sizes[$i]= str_replace("7", "US - 7", $sizes[$i]);
$sizes[$i] = preg_replace('/\b6\b/', "US - 6", $sizes[$i]);
$sizes[$i] = preg_replace('~6\+$~m', "US - 6.5", $sizes[$i]);
$sizes[$i] = preg_replace('~5+$~m', "US - 5.5", $sizes[$i]);
我得到了类似的东西:
[0] => US - 10
[1] => US - 5.US - 5
[2] => US - 6
[3] => US - 6.US - 5.US - 5
[4] => US - 7
[5] => US - 8
[6] => US - 9
[7] => US - US - 7.5
[8] => US - US - 8.5
如果有人能提供帮助,我将不胜感激。
谢谢
而不是尝试使用正则表达式并假设常量 'US - x' 并且 +
表示 .5
大小,然后使用 US -
作为前缀并仅替换 +
与 .5
并使用 array_walk()
处理每个元素...
$size = [0 => "5",
1 => "6",
2 => "10",
3 => "6+",
4 => "7",
5 => "7+",
6 => "8",
7 => "8+",
8 => "9"];
array_walk($size, function (&$data) {
$data = "US - ".str_replace("+", ".5", $data);
});
print_r($size);
输出...
Array
(
[0] => US - 5
[1] => US - 6
[2] => US - 10
[3] => US - 6.5
[4] => US - 7
[5] => US - 7.5
[6] => US - 8
[7] => US - 8.5
[8] => US - 9
)
你当然可以使用任何类型的循环而不仅仅是array_walk()
,主要逻辑是相同的。
这是另一种方法:
<?php
$result = [];
$size = [
0 => "5",
1 => "6",
2 => "10",
3 => "6+",
4 => "7",
5 => "7+",
6 => "8",
7 => "8+",
8 => "9"
];
foreach($size as $key => $value) {
$result[$key] = "US - " . number_format(floatval($value), 2);
}
echo "<pre>";
print_r($result);
echo "</pre>";
输出:
Array
(
[0] => US - 5.00
[1] => US - 6.00
[2] => US - 10.00
[3] => US - 6.00
[4] => US - 7.00
[5] => US - 7.00
[6] => US - 8.00
[7] => US - 8.00
[8] => US - 9.00
)
我正在解析一些数据并针对我的网站对其进行标准化。 我解析得到的数据:
[sizes] => Array
(
[0] => 5
[1] => 6
[2] => 10
[3] => 6+
[4] => 7
[5] => 7+
[6] => 8
[7] => 8+
[8] => 9
)
我需要得到:
[0] => US - 5
[1] => US - 6
[2] => US - 10
[3] => US - 6.5
[4] => US - 7.5
[5] => US - 8.5
我尝试了 preg_replace(各种不同的变体)和 str_replace,但似乎没有任何效果。它似乎覆盖了值:
$sizes[$i]= str_replace("7", "US - 7", $sizes[$i]);
$sizes[$i] = preg_replace('/\b6\b/', "US - 6", $sizes[$i]);
$sizes[$i] = preg_replace('~6\+$~m', "US - 6.5", $sizes[$i]);
$sizes[$i] = preg_replace('~5+$~m', "US - 5.5", $sizes[$i]);
我得到了类似的东西:
[0] => US - 10
[1] => US - 5.US - 5
[2] => US - 6
[3] => US - 6.US - 5.US - 5
[4] => US - 7
[5] => US - 8
[6] => US - 9
[7] => US - US - 7.5
[8] => US - US - 8.5
如果有人能提供帮助,我将不胜感激。 谢谢
而不是尝试使用正则表达式并假设常量 'US - x' 并且 +
表示 .5
大小,然后使用 US -
作为前缀并仅替换 +
与 .5
并使用 array_walk()
处理每个元素...
$size = [0 => "5",
1 => "6",
2 => "10",
3 => "6+",
4 => "7",
5 => "7+",
6 => "8",
7 => "8+",
8 => "9"];
array_walk($size, function (&$data) {
$data = "US - ".str_replace("+", ".5", $data);
});
print_r($size);
输出...
Array
(
[0] => US - 5
[1] => US - 6
[2] => US - 10
[3] => US - 6.5
[4] => US - 7
[5] => US - 7.5
[6] => US - 8
[7] => US - 8.5
[8] => US - 9
)
你当然可以使用任何类型的循环而不仅仅是array_walk()
,主要逻辑是相同的。
这是另一种方法:
<?php
$result = [];
$size = [
0 => "5",
1 => "6",
2 => "10",
3 => "6+",
4 => "7",
5 => "7+",
6 => "8",
7 => "8+",
8 => "9"
];
foreach($size as $key => $value) {
$result[$key] = "US - " . number_format(floatval($value), 2);
}
echo "<pre>";
print_r($result);
echo "</pre>";
输出:
Array
(
[0] => US - 5.00
[1] => US - 6.00
[2] => US - 10.00
[3] => US - 6.00
[4] => US - 7.00
[5] => US - 7.00
[6] => US - 8.00
[7] => US - 8.00
[8] => US - 9.00
)