【www.bbyears.com--Action】
最近工作中遇到一个需求,需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例。感兴趣的朋友们可以参考学习。
实例代码如下
假设页面 1.html 的网页源代码是:
代码如下
*{padding:0;margin:0;font-size:12px;}
.tbl{margin:20px auto;border:1px solid #AACCEE;padding:30px 30px;border-radius:4px;}
.tbl td{line-height:30px;vertical-align:top;}
textarea{resize:none;height:60px;}
昵称:
密码:
年龄:
性别:
地区:
城市:
兴趣:
照片:
简介:
备注:
昵称:
密码:
备注:
我们需要获取到这个页面所有 form 表单,及每个 form 表单所包含的各类表单元素,例如:input,select,textarea等等。
匹配的源代码是:
代码如下
$content=file_get_contents('1.html');
$arr_form= get_page_form_data($content);
if(empty($arr_form))
{
echo'抱歉!未匹配到 form 表单元素';
}else
{
foreach($arr_formas$k=>$v)
{
echo'form'.($k+1).':
';
if(!empty($v['action']))
{
echo'----action:
';
echo'--------'.$v['action'].'
';
}
if(!empty($v['method']))
{
echo'----method:
';
echo'--------'.$v['method'].'
';
}
if(!empty($v['inputs']))
{
echo'----inputs:
';
foreach($v['inputs']as$key=>$value)
{
echo'--------name:'.$value['name'].' type:'.$value['type'].' value:'.$value['value'].'
';
}
}
if(!empty($v['textarea']))
{
echo'----textarea:
';
foreach($v['textarea']as$key=>$value)
{
echo'--------name:'.$value['name'].' value:'.$value['value'].'
';
}
}
if(!empty($v['select']))
{
echo'----select:
';
for($m= 0;$m { echo'--------name:'.$v['select'][$m]['name'].' if(!empty($v['select'][$m]['option'])) { foreach($v['select'][$m]['option']as$key=>$value) { echo'------------value:'.$value.' } } } } } } // 获取页面中的 form 表单中的所有 input、textarea 元素中 name、value、type 等属性值 functionget_page_form_data($content) { $arr_form=array(); $form= regular_form_tags($content); for($i= 0;$i { $arr_form[$i]['action'] = regular_form_action($form[1][$i]); $arr_form[$i]['method'] = regular_form_method($form[1][$i]); $input= regular_input_tags($form[2][$i]); for($j= 0;$j { $arr_form[$i]['inputs'][$j]['name'] = regular_input_name($input[0][$j]); $arr_form[$i]['inputs'][$j]['type'] = regular_input_type($input[0][$j]); $arr_form[$i]['inputs'][$j]['value'] = regular_input_value($input[0][$j]); } $textarea= regular_textarea_tags($form[2][$i]); for($k= 0;$k { $arr_form[$i]['textarea'][$k]['name'] = regular_textarea_name($textarea[$k]); $arr_form[$i]['textarea'][$k]['value'] = regular_textarea_value($textarea[$k]); } $select= regular_select_tags($form[2][$i]); for($l= 0;$l { $arr_form[$i]['select'][$l]['name'] = regular_select_name($select[1][$l]); $option= regular_option_tags($select[2][$l]); for($n= 0;$n { $arr_form[$i]['select'][$l]['option'][$n] = regular_option_value($option[$l][$n]); } } } return$arr_form; } // 正则匹配 form 标签 functionregular_form_tags($string) { $pattern='/ preg_match_all($pattern,$string,$result); return$result; } // 正则匹配 form 标签的 action 属性值 functionregular_form_action($string) { $pattern='/action[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 form 标签的 method 属性值 functionregular_form_method($string) { $pattern='/method[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 input 标签 functionregular_input_tags($string) { $pattern='/ if(preg_match_all($pattern,$string,$result)) { return$result; } returnnull; } // 正则匹配 input 标签的 name 属性值 functionregular_input_name($string) { $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 input 标签的 type 属性值 functionregular_input_type($string) { $pattern='/type[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 input 标签的 value 属性值 functionregular_input_value($string) { $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 textarea 标签 functionregular_textarea_tags($string) { $pattern='/( if(preg_match_all($pattern,$string,$result)) { return$result[1]; } returnnull; } // 正则匹配 textarea 标签的 name 属性值 functionregular_textarea_name($string) { $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 textarea 标签的 name 属性值 functionregular_textarea_value($string) { $pattern='/ if(preg_match($pattern,$string,$result)) { return$result[1]; } returnnull; } // 正则匹配 select 标签 functionregular_select_tags($string) { $pattern='/ preg_match_all($pattern,$string,$result); return$result; } // 正则匹配 select 标签的 option 子标签 functionregular_option_tags($string) { $pattern='/ preg_match_all($pattern,$string,$result); return$result; } // 正则匹配 select 标签的 name 属性值 functionregular_select_name($string) { $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 select 的子标签 option 的 value 属性值 functionregular_option_value($string) { $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/si'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } 运行效果如下图所示: 这样我们就可以实现获取任意一个页面中的 form 表单所有存在的元素啦!
';
';