【问题标题】:matching double quote in preg_match在 preg_match 中匹配双引号
【发布时间】:2011-09-25 01:54:45
【问题描述】:

我想匹配下面的模式,得到单词target。

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

我尝试了这个但徒劳无功。

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

我认为问题是因为双引号

我也尝试了\"但仍然失败...

【问题讨论】:

  • 对不起,它不起作用 '@(?:
    找出问题所在,在你的模式上加倍空格,在我的回答中详细说明。
  • 我敢打赌,无论你在做什么,使用DOMDocumentDOMXPath 可以做得更好。

标签: php regex preg-match


【解决方案1】:

它失败只是因为你的模式中有一个双空格(标有_):

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
?>

【讨论】:

    【解决方案2】:

    你已经接近了......你需要匹配usng()。看起来你有一个额外的)

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

    [^"] - "

    以外的任何字符

    ( ) - 匹配部分

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签