1

我有一个$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 和值之间使用通配符(唯一可以确定的是输入在 id 之前,在值之前)。

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

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

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

4

2 回答 2

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] );
于 2014-08-06T09:40:13.727 回答
2

应该是比较简单的

$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)
于 2013-10-18T21:59:00.377 回答