2015-02-24 2 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' –

+0

В это простейшая просто переместить второй') ' четыре символа слева, чтобы не включать '') 'в группу захвата, хотя его можно улучшить. – AbraCadaver

ответ

2

Попробуйте это regex:

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

[^")]+ отрицание основано регулярное выражение, которое не соответствует тексту, пока " ИЛИ ) обнаруживается, таким образом, соответствующий идентификатор, прежде чем " или ) без фактического захвата его.

+1

Я не думаю, что это очень помогает OP, если вы не объясните, что вы изменили и что делает это регулярное выражение – Rizier123

+1

Спасибо, да, я добавил его сейчас – anubhava

+1

Большое спасибо ... – Mubin

1

В качестве другого решения вам действительно нужно только скопировать скобки закрытия, чтобы он не включал цитату и закрывающие символы круглых скобок.

Как и используйте это:

/order\.aspx\?order_id=(.*)\"\)/ 
         ^
          | 
        move this over here 
Смежные вопросы