2015-02-24 101 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