来自输入字段的正则表达式值

时间:2013-10-18 21:52:34

标签: php regex preg-match-all

我有一个包含大量html代码的$html变量,我试图从某个参数中提取值(这可能是值,或类等)输入字段基于其id。

我试图找到的代码示例:

<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="fname.lname@gmail.com" class="txt-box  txtbox-m "  aria-describedby="" aria-required="true" disabled="disabled" />

我尝试构建一个正则表达式,从中提取值(fname.lname@gmail.com),告诉它从<input>中找到id="emailaddress"的值 - 在输入和id之间,以及在id和value之间使用通配符(唯一可以肯定的是输入在id之前,它在value之前)。

这是我当前的PHP代码(使用preg_match_all,因为它应该成为我可以在有多个字段的情况下重用的函数):

$pattern = '<input(.*)id="emailaddress"(.*)value="(.*?)"';
preg_match_all('/'.$pattern.'/si',$html,$matches);

我一直在尝试变体,但我要么得到第一个输入字段,要么没有匹配。欢迎任何帮助!提前谢谢。

2 个答案:

答案 0 :(得分:3)

如果您只想获得该值,请尝试以下方法:

$string = '<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="fname.lname@gmail.com" class="txt-box  txtbox-m "  aria-describedby="" aria-required="true" disabled="disabled" />';

$pattern = '/<input(?:.*?)id=\"emailaddress\"(?:.*)value=\"([^"]+).*>/i';

preg_match($pattern, $string, $matches);
var_dump( $matches[1] );

答案 1 :(得分:1)

应该是一个相当简单的

$string = '<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="fname.lname@gmail.com" class="txt-box  txtbox-m "  aria-describedby="" aria-required="true" disabled="disabled" />';

$pattern = '/<input(.*?)id=\"emailaddress\"(.*)value=\"(.*?)\"/i';
preg_match_all($pattern, $string, $matches);
var_dump($matches);

这让我:

array (size=4)
    0 => 
        array (size=1)
            0 => string '<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="fname.lname@gmail.com"' (length=126)
    1 => 
        array (size=1)
            0 => string ' type="text" autocomplete="" name="confirmedEmailAddress" ' (length=58)
    2 => 
        array (size=1)
            0 => string ' maxlength="60" ' (length=16)
    3 => 
        array (size=1)
            0 => string 'fname.lname@gmail.com' (length=21)