PHP 字符串分割规则

PHP string split regular

常规 exp = (Digits)*(A|B|DF|XY)+(Digits)+

我真的对这个模式感到困惑 我想在 PHP 中分隔此字符串,有人可以帮助我 我的输入可能是这样的

  1. A1234
  2. B 1239
  3. 1A123
  4. 12A123
  5. 1A 1234
  6. 12 一个 123
  7. 1234乙123456789
  8. 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 组:ABDFXY
  • (?:\s*(\d+))? - 一个可选的序列:
    • \s* - 0+ 个空格
    • (\d+) - 第 3 组:任意或更多数字
  • $ - 字符串结尾。