соответствие двойной кавычки в preg_match - PullRequest
2 голосов
/ 25 сентября 2011

Я хочу соответствовать шаблону ниже и получить слово target.

INPUT TYPE = "HIDDEN" NAME = "TITLE" VALUE = "target">

Я пробую это, но напрасно.

preg_match('@(?:<INPUT TYPE="HIDDEN"  NAME="TITLE" VALUE=")(.*)(?:">)@',$data,$matches);

Я думаю, что проблема в двойной кавычке

Я тоже пытаюсь \ "но все равно не получится ...

Ответы [ 3 ]

2 голосов
/ 25 сентября 2011

Это не сработает просто потому, что в вашем паттерне здесь есть двойной пробел (помеченный _):

INPUT TYPE="HIDDEN"__NAME="TITLE"

Удалите там один пробел, и это сработает, в любом случае, здесь будет моя попытка с нуля, нечувствителен к регистру и либо с " или ', хотя я не уверен, является ли это частью того, что вы хотите, чтобы name было title, и в этом случае мне пришлось бы немного его отредактировать.

<?php
    $data = '<input type="hidden" name="title" value="target">';
    preg_match('/<input[^>]+value=[\'"](\w*)[\'"][^>]*>/i',$data,$matches);
    echo $matches[1]; //=> target
?>
0 голосов
/ 25 сентября 2011

Ты близко ... Тебе нужно соответствовать usng (). Похоже, у вас есть дополнительный)

preg_match('@<INPUT TYPE="HIDDEN"  NAME="TITLE" VALUE="([^"]*)">@',$data,$matches);

[^ "] - любой символ, кроме"

() - подходящая часть

0 голосов
/ 25 сентября 2011

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

preg_match('@<INPUT TYPE="HIDDEN" NAME="TITLE" VALUE="([^"]*)">@', $data, $matches);
...