输入字段中的正则表达式值


Regex value from input field

我有一个包含大量 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),告诉它从id="emailaddress"的所有<input>中找到值 - 输入和 id 之间以及 id 和值之间使用通配符(唯一确定的是输入在 id 之前,在值之前)。

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

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

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

如果您只想获取值,请尝试以下操作:

$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] );

应该是一个相当简单的

$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)