PHP 字符串分割规则
PHP string split regular
常规 exp = (Digits)*(A|B|DF|XY)+(Digits)+
我真的对这个模式感到困惑
我想在 PHP 中分隔此字符串,有人可以帮助我
我的输入可能是这样的
- A1234
- B 1239
- 1A123
- 12A123
- 1A 1234
- 12 一个 123
- 1234乙123456789
- 12 XY 1234567890
并转换成这个
Array
(
[0] => 12
[1] => XY
[2] => 1234567890
)
<?php
$input = "12 XY 123456789";
print_r(preg_split('/\d*[(A|B|DF|XY)+\d+]+/', $input, 3));
//print_r(preg_split('/[\s,]+/', $input, 3));
//print_r(preg_split('/\d*[\s,](A|B)+[\s,]\d+/', $input, 3));
您可以匹配并捕获数字、字母和数字:
$input = "12 XY 123456789";
if (preg_match('/^(?:(\d+)\s*)?(A|B|DF|XY)(?:\s*(\d+))?$/', $input, $matches)){
array_shift($matches);
print_r($matches);
}
参见PHP demo and the regex demo。
^
- 字符串开头
(?:(\d+)\s*)?
- 一个可选的序列:
(\d+)
- 第 1 组:任意或更多数字
\s*
- 0+ 个空格
(A|B|DF|XY)
- 第 2 组:A
、B
、DF
或 XY
(?:\s*(\d+))?
- 一个可选的序列:
\s*
- 0+ 个空格
(\d+)
- 第 3 组:任意或更多数字
$
- 字符串结尾。
常规 exp = (Digits)*(A|B|DF|XY)+(Digits)+
我真的对这个模式感到困惑 我想在 PHP 中分隔此字符串,有人可以帮助我 我的输入可能是这样的
- A1234
- B 1239
- 1A123
- 12A123
- 1A 1234
- 12 一个 123
- 1234乙123456789
- 12 XY 1234567890
并转换成这个
Array
(
[0] => 12
[1] => XY
[2] => 1234567890
)
<?php
$input = "12 XY 123456789";
print_r(preg_split('/\d*[(A|B|DF|XY)+\d+]+/', $input, 3));
//print_r(preg_split('/[\s,]+/', $input, 3));
//print_r(preg_split('/\d*[\s,](A|B)+[\s,]\d+/', $input, 3));
您可以匹配并捕获数字、字母和数字:
$input = "12 XY 123456789";
if (preg_match('/^(?:(\d+)\s*)?(A|B|DF|XY)(?:\s*(\d+))?$/', $input, $matches)){
array_shift($matches);
print_r($matches);
}
参见PHP demo and the regex demo。
^
- 字符串开头(?:(\d+)\s*)?
- 一个可选的序列:(\d+)
- 第 1 组:任意或更多数字\s*
- 0+ 个空格
(A|B|DF|XY)
- 第 2 组:A
、B
、DF
或XY
(?:\s*(\d+))?
- 一个可选的序列:\s*
- 0+ 个空格(\d+)
- 第 3 组:任意或更多数字
$
- 字符串结尾。