Php 从字符串中提取票证号

Php 从字符串中提取票证号,php,regex,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 <sp

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

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>   ]
String 1)订单2555225552票号[票201805000000012345]
字符串2)订单32234234票号[票201805000000012345]
字符串3)订单56567655665565票号[票号201805000000012345]
我想在这里从输入字符串(1、2或3)中获取数字201805000000012345或任何其他数字


$matches=array();
预匹配('/\[票证(.*)([0-9]+)(.*)\]/','票号[票证20180500000001245],$matches);
输出:

array:4 [
  0 => "[TICKET <span>201805000000012345</span>]"
  1 => " <span>20180500000001234"
  2 => "5"
  3 => "</span>"
]
数组:4[
0=>“[票证201805000000012345]”
1 => " 20180500000001234"
2 => "5"
3 => ""
]

像这样简单的正则表达式可以解决您的问题:

'\D+\d+\D+(\d+)'
如果需要,还可以捕获订单:

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

此正则表达式不会检查格式是否与其他答案中的格式匹配,但如果您知道它始终与示例中的格式相同,则这不是问题

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

'\D+\d+\D+(\d+)'
如果需要,还可以捕获订单:

'\D+(\d+)\D+(\d+)'
此正则表达式不会检查格式是否与其他答案中的格式匹配,但如果您知道它始终与示例中的格式相同,则这不是问题。

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);
preg\u 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);

你的正则表达式基本上是正确的。您只需添加一个
即可使其不贪婪

/\[TICKET(.*?)([0-9]+)(.*)\]/
事实上,如果您不关心数字后面的内容,您也可以省略该部分:

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

你的正则表达式基本上是正确的。您只需添加一个
即可使其不贪婪

/\[TICKET(.*?)([0-9]+)(.*)\]/
事实上,如果您不关心数字后面的内容,您也可以省略该部分:

/\[TICKET(.*?)([0-9]+)/
试试这个:

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

试试这个:

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


您可以在问题中添加您尝试过的内容吗?我认为标题
从字符串
中提取票号,或者从输入字符串
中提取任何其他数字,从示例数据来看,似乎是两件不同的事情。这3个函数可以解决您的问题,但您必须首先自己研究它们。使用正则表达式在字符串中查找第二个数字问题在于
(.*)
本质上是贪婪的。你需要让它不贪婪。下面是我的答案。你能补充一下你的问题吗?我认为标题
从字符串
中提取票号,或者从输入字符串
中提取任何其他数字,从示例数据来看,似乎是两件不同的事情。这3个函数可以解决您的问题,但您必须首先自己研究它们。使用正则表达式在字符串中查找第二个数字问题在于
(.*)
本质上是贪婪的。你需要让它不贪婪。见下面我的答案。