PHP使用preg_match获取匹配的订单ID

时间:2019-01-10 19:09:45

标签: php regex preg-match

我正在处理一个PHP代码,该代码需要从文本中获取一些订单ID,订单ID格式如下所示

  Ex- 
          201812321910AT
          201812321810AT        
          201812321910AT-001
          201812321910AT-001

里面有类似下面的文字

      lorem ispmes dolter yexy tesy 201812321910AT l tesyui lorem ispmes 
dolter gjexy tesy    201812321810AT hekfl lorem tesxts
 201812321910AT-001 lot kyesu oerd 201812321910AT-001 lfs tes ol sghn

我尝试了此代码,但它还会返回其他匹配的单词,这些单词具有12-15个字母

preg_match('/\b[A-Z]{12,15}\b/', $string, $matches);
var_dump($matches);

我对php preg_match模式不了解,有人可以帮助我使用PHP获取匹配的订单ID。 上面的订单ID仅作为示例,通常订单ID包含12个数字,然后加上AT字母,并且某些订单具有12个数字,然后是AT + 3个数字,然后是-

2 个答案:

答案 0 :(得分:1)

此正则表达式足以捕获帖子中的订单ID,

\b\d{12}[A-Z]{2}(?:-\d{3}\b)?

Demo

答案 1 :(得分:1)

无需使其比它更复杂。
捕获12位数字,然后偷懒直到空格。

preg_match_all("/(\d{12}AT.*?)\s/", $str, $matches);
var_dump($matches);

输出:

array(2) {
  [0]=>
  array(4) {
    [0]=>
    string(15) "201812321910AT "
    [1]=>
    string(15) "201812321810AT "
    [2]=>
    string(19) "201812321910AT-001 "
    [3]=>
    string(19) "201812321910AT-001 "
  }
  [1]=>
  array(4) {
    [0]=>
    string(14) "201812321910AT"
    [1]=>
    string(14) "201812321810AT"
    [2]=>
    string(18) "201812321910AT-001"
    [3]=>
    string(18) "201812321910AT-001"
  }
}

https://3v4l.org/S4CSr