我有一个包含大量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);
我一直在尝试变体,但我要么得到第一个输入字段,要么没有匹配。欢迎任何帮助!提前谢谢。
答案 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)