如何使用preg_match_all从字符串中获取不同的变量

时间:2012-08-01 09:55:40

标签: php string preg-match-all

我想知道如何从这个字符串中获取number1和number2的标识符。

NAME  IDENTIFIER-NUMBER1-NUMBER2

示例:

John Doe ABC-3901-11801

我想将IDENTIFIER NUMBER1和NUMBER2单独分成不同的变量。

但问题是我不知道它的位置是什么,或者背后是否有额外的文字如下:

Blablabla ABC-3901-11801 John Doe Blablabla

ofc也可以有不同的数字和字母:

XYZ-46781-28102

任何人都可以解释一下如何在php中找到这些变量。

提前致谢

1 个答案:

答案 0 :(得分:1)

假设:

  • 标识符始终为大写
  • 标识符始终由3个字母组成
  • Number1只有数字,并且始终以破折号
  • 开头
  • Number2只有数字,前面总是以破折号
  • 开头

此正则表达式将起作用 - > '/([A-Z]{3})-([0-9]*)-([0-9]*)/'

示例:

$data = 'Blablabla ABC-3901-11801 John Doe Blablabla';
preg_match_all('/([A-Z]{3})-([0-9]*)-([0-9]*)/', $data, $matches, PREG_PATTERN_ORDER);
var_dump($matches);

这将输出

array
  0 => 
    array
      0 => string 'ABC-3901-11801' (length=14)
  1 => 
    array
      0 => string 'ABC' (length=3)
  2 => 
    array
      0 => string '3901' (length=4)
  3 => 
    array
      0 => string '11801' (length=5)
  • $ matches [1]始终是标识符
  • $ matches [2]总是number1
  • $ matches [3]总是number2

编辑: 这里也是一个更通用的正则表达式:

/([A-Za-z]*)-([0-9]*)-([0-9]*)/

这只假设IDENTIFIER只包含字母(任意数字,大写或小写)

例如,这个正则表达式适用于这种情况

Blablabla abcdef-3901-11801 John Doe Blablabla