php - 用于拆分服装尺寸的正则表达式
问题描述
我有以下输入(仅例如,真实输入包含更多疯狂的数据)
$values = [
'32/34, 36/38, 40/42, 44/46',
'40/42/44/46/48',
'58/60',
'39-42',
'40-50-60',
'24-25,26,28,30',
'36 40,5 44',
];
并希望通过分隔符拆分它,例如/
or,
但保留成对的值。仅当分隔符未多次出现时才应执行此操作,因此结果应如下所示:
'32/34, 36/38, 40/42, 44/46'
=> [ '32/34', '36/38', '40/42', '44/46' ]
'40/42/44/46/48'
=> [ '40', '42', '44', '46', '48' ]
'58/60'
=> [ '58/60' ]
'39-42'
=> [ '39-42' ]
'40-50-60'
=> [ '40', '50', '60' ]
'24-25,26,28,30'
=> [ '24-25', '26', '28', '30' ]
'36 40,5 44'
=> [ '36', '40,5', '44' ]
到目前为止我所拥有的是
$separator = '^|$|[\s,\/-]';
$decimals = '\d+(?:[,.][05])?';
foreach ($values as $value) {
preg_match_all('/' .
'(?<=' . $separator . ')' .
'(?:' .
'(?P<var1>(' . $decimals . ')[\/-](?-1)|(?-1))' .
')(?=' . $separator . ')' .
'/ui', $value, $matches);
print_r($matches);
}
但这失败了40/42/44/46/48
返回
[var1] => Array
(
[0] => 40/42
[1] => 44/46
[2] => 48
)
但是每个数字都应该单独返回。修改正则表达式'(?P<var1>(' . $decimals . ')([\/-])(?-2)|(?-2))(?!\3)'
更好,但仍然返回错误的结果
[var1] => Array
(
[0] => 40
[1] => 42
[2] => 44
[3] => 46/48
)
正确的正则表达式应该如何?
解决方案
推荐阅读
- python - ValueError: 操作数不能与形状 (0,) (784,) 一起广播
- python - 根据另一列(条件)的值替换缺失值 NAN
- oauth-2.0 - JHIpster KeyCloak OAuth,登录期间代理错误
- mongodb - 带有参数的axios获取请求不起作用
- c# - 验证字符串预防不起作用?
- javascript - 如何使用 JavaScript 中的 PATCH 请求将项目添加到数据库中的数组?
- c# - 如何检测函数指针类型?
- php - 折扣购物车项目价格不包括 WooCommerce 中的类别及其子项
- python - Python 3 - 按单词拆分文本文件,计算出现次数并返回已排序元组的列表
- node.js - 命名空间“Express”没有导出成员“SessionData”