2015-02-24 103 views
0

我有这个PHP的preg_match没有返回预期的结果

$str = '"javascript:OpenWindow("order.aspx?order_id=161FA084AEF13FD7")"'; 
preg_match('/order\.aspx\?order_id=(.*\"\))/', $str, $a); 
print_r($a); 

输出期望:

161FA084AEF13FD7 

但得到

161FA084AEF13FD7") 

请提高这个..

+0

'/order\.aspx\?order_id =([[:xdigit:]] +)/ i' – 2015-02-24 16:16:30

+0

在它的最简单的只是移动至第二个')'四个字符左边不包括'')''在捕获组中,但它可以被改进。 – AbraCadaver 2015-02-24 16:17:35

回答

2

试试这个正则表达式:

preg_match('/order\.aspx\?order_id=([^")]+)/', $str, $a); 

[^")]+是基于正则表达式否定被发现")之前从而匹配标识符,而无需实际捕获它匹配文本直到" OR )

+1

如果你不解释你已经改变了什么以及这个正则表达式是什么 – Rizier123 2015-02-24 16:16:43

+1

谢谢,是的,我现在加了它 – anubhava 2015-02-24 16:18:55

+1

非常感谢... – Mubin 2015-02-24 16:19:17

1

作为另一种解决方案,您只需确实将关闭捕捉括号移过来,以便它不包括引号和右括号字符。

如,使用​​:

/order\.aspx\?order_id=(.*)\"\)/ 
         ^
          | 
        move this over here