我有一个包含大量 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)