2017-05-04 37 views
3

需要一些正则表达式的帮助,所以我需要从字符串中提取票号“票#999999”..我如何使用正则表达式来做到这一点。preg_match_all()

我的当前正则表达式正在工作,如果我有超过一个号码在票#9999 ..但如果我只有票#9它不工作请帮助。

当前正则表达式。

preg_match_all('/(Ticket#[0-9])\w\d+/i',$data,$matches); 

谢谢。

+0

这是可能的,可以提供更好/更高效的答案,但我们不会知道,直到你提供完整的输入字符串。我们知道您的输入字符串可以是'Ticket#9',但是当您有多个票证子字符串需要捕获时,我们不知道您的输入字符串是什么样子。请编辑您的问题以澄清您的问题。 – mickmackusa

回答

3

在您的模式[0-9]匹配1个数字,\w匹配另一个数字,\d+匹配1+数字,因此需要#后面的3位数字。

使用

preg_match_all('/Ticket#([0-9]+)/i',$data,$matches); 

这将匹配:

  • Ticket# - 一个字符串Ticket#
  • ([0-9]+) - 第1组捕获1个或多个数字。

PHP demo

$data = "Ticket#999999 ticket#9"; 
preg_match_all('/Ticket#([0-9]+)/i',$data,$matches, PREG_SET_ORDER); 
print_r($matches); 

输出:

Array 
(
    [0] => Array 
     (
      [0] => Ticket#999999 
      [1] => 999999 
     ) 

    [1] => Array 
     (
      [0] => ticket#9 
      [1] => 9 
     ) 

)