我想从包含数字和字母的字符串中提取票号,如:
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>"
]
答案 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);
?>