^(?:([0-9]+) X,)?(?: )?(?:([0-9]+) Y,)?(?: Z)?$
我所做的是检查以下模式:
66 X, 55 Y, Z
66 X, 55 Y,
66 X, Z
55 Y, Z
66 X,
55 Y,
第1组是66 X,
第2组是55 Y,
if (isset($group_1)) {
echo $group_1;
} else {
echo 'null';
}
echo ' - ';
if (isset($group_2)) {
echo $group_2;
} else {
echo 'null';
}
根据模式获得如下结果:
66 - 55
66 - 55
66 - null
null - 55
66 - null
null - 55
我怎么能用PHP做到这一点?
解决方法:
使用preg_match(_all)?函数你有一个数组作为返回值.您可以这样使用该数组:
// An unnecessary non-capturing group removed
$re = '/^(?:([0-9]+) X,)? ?(?:([0-9]+) Y,)?(?: Z)?$/m';
// Preparing Feeds
$str = <<<_
66 X, 55 Y, Z
66 X, 55 Y,
66 X, Z
55 Y, Z
66 X,
55 Y,
\n
_;
// `PREG_SET_ORDER` flag is important
preg_match_all($re, $str, $matches, PREG_SET_ORDER);
// Iterate over matches
foreach ($matches as $match) {
// Remove first value off array (whole match)
unset($match[0]);
// Add `null` to existing empty value or the one that is not captured
foreach (['null', 'null'] as $key => $value) {
if (!isset($match[$key + 1]) || $match[$key + 1] === '')
$match[$key + 1] = $value;
}
// Implode remaining values
echo implode(" - ", $match), PHP_EOL;
}
66 - 55
66 - 55
66 - null
null - 55
66 - null
null - 55
null - null
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。