一种使多个preg_replace更清晰的方法



我正在尝试将输入的字符串转换为匹配范围,以下是我到目前为止所做的行:

$targets = "1-  6;20; 20-4,71100  12";
$ranges = preg_split("/[,;]/",    // Splits sthe string into an array on any comma , or semicolon ; encountered
preg_replace("/[s]/", "",   // Removes remaining white spaces
preg_replace("/[^;][s]+/", ";",  // Replaces all white spaces that are not preceded by a semicolon ; by a semicolon ;
preg_replace("/[s]*[-][s]*/", "-", $targets)   // Replaces all dashes - surrounded by any number of white spaces by a single dash -
)
)
);

这些线条效果很好,但我想让它更漂亮...... 这是输出:

array (size=5)
0 => string '1-6' (length=3)
1 => string '20' (length=2)
2 => string '20-4' (length=4)
3 => string '7110' (length=4)
4 => string '12' (length=2)

问题是:有什么办法让它更清楚吗?(例如将结果与数组中的替换绑定? 你能给我举一些例子吗,我对这些台词不是很自豪:/谢谢

您可以匹配内部带有空格的范围,并在获得带有它们的数组后,删除所有类型的空格。

要提取范围,正则表达式可能如下所示

'~d+(?:s*-s*d+)?~'

请参阅正则表达式演示。d+(?:s*-s*d+)?将匹配 1+ 位数字,后跟一个可选的-序列,用 0+ 空格括起来,然后是 1+ 位数字。

在 PHP 中:

$targets = "1-  6;20; 20-4,71100  12";
if (preg_match_all('~d+(?:s*-s*d+)?~', $targets, $m)) {
print_r(preg_replace('~s+~', '', $m[0]));
};

preg_replace('~s+~', '', $m[0])将从匹配中删除所有空格。

如果可能有 Unicode 空格,请将u修饰符添加到preg_replace调用中:

preg_replace('~s+~u', '', $m[0]) 

输出:

Array
(
[0] => 1-6
[1] => 20
[2] => 20-4
[3] => 71100
[4] => 12
)

相关内容

  • 没有找到相关文章

最新更新