从字符串中提取票号

时间:2018-05-03 06:40:48

标签: php regex

我想从包含数字和字母的字符串中提取票号,如:

String 1) Order 2555225552 Ticket Number [TICKET 201805000000012345]
String 2) Order 32234234234 Ticket Number [TICKET <span>201805000000012345</span>]
String 3) Order 5656567655665565 Ticket Number [  TICKET <span>   201805000000012345</span>   ]

我想在这里从输入字符串(1,2或3)中获取数字201805000000012345或任何其他数字。

$matches = array();
preg_match('/\[TICKET(.*)([0-9]+)(.*)\]/', 'Ticket Number [TICKET <span>201805000000012345</span>]', $matches);

输出:

array:4 [
  0 => "[TICKET <span>201805000000012345</span>]"
  1 => " <span>20180500000001234"
  2 => "5"
  3 => "</span>"
]

4 个答案:

答案 0 :(得分:2)

你的正则表达式大多是正确的。您只需添加201805000000012345 即可使其变得非贪婪。

?

事实上,如果你不关心数字之后的内容,你也可以省略那部分:

/\[TICKET(.*?)([0-9]+)(.*)\]/

答案 1 :(得分:1)

typeConstructor解决方案:

preg_match()
  • $s = 'Order 5656567655665565 Ticket Number [ TICKET <span> 201805000000012345</span>'; preg_match('/TICKET [^0-9]*\K[0-9]+/', $s, $m); $t_number = isset($m[0])? $m[0] : null; print_r($t_number); - 重置报告的匹配的起点。最终匹配中不再包含任何以前消费的字符

输出:

\K

答案 2 :(得分:0)

正如此简单的正则表达式将解决您的问题:

'\D+\d+\D+(\d+)'

如果您需要,您也可以捕获订单:

'\D+(\d+)\D+(\d+)'

这个正则表达式不会像其他答案那样检查格式是否匹配,但是如果你知道它总是像你的例子中那样那么那不是问题

答案 3 :(得分:0)

试试这个:

<?php
$matches = array();
preg_match('/\[TICKET(.*)([0-9]+)(.*)\]/', strip_tags('Ticket Number [TICKET <span>201805000000012345</span>]'), $matches);
print_r( $matches);
?>