求一个从字符串中提取变量和值,转化数组的写法

vgy12304 2010-01-21 09:22:30
字符串:
邮箱:
<INPUT class=black value=@ size=30 name=email _extended=\"true\"></TR></TABLE></DIV>
电话:
<INPUT class=black name=tel _extended=\"true\" value=ddd></TR></TABLE></DIV>
地址:
<INPUT class=red name=address _extended=\"true\"></TR></TABLE></DIV>


希望得到的数组如下:
array
{
[0] => array( [name]=>email ,[class]=> XXX , [size]=> XXX , [value]=>XXX)
[1] => array( [name]=>tel ,[class]=> XXX , [size]=> XXX , [value]=>XXX)
[2] => array( [name]=>address ,[class]=> XXX , [size]=> XXX , [value]=>XXX)
}
...全文
141 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vgy12304 2010-01-21
  • 打赏
  • 举报
回复
我自己修改的代码,已经很接近我要的结果了
$htmlcode=$_POST["htmlcode"];
preg_match_all("/name=(.*?) /", $htmlcode, $matches);

print_r($matches);

输出结果:(重复了一次,帮看看怎么修改一下,我就好用了,谢谢大家了)
Array ( [0] => Array ( [0] => name=address [1] => name=email [2] => name=xingqu [3] => name=relname [4] => name=sex ) [1] => Array ( [0] => address [1] => email [2] => xingqu [3] => relname [4] => sex ) )
vgy12304 2010-01-21
  • 打赏
  • 举报
回复
补充,<input只是一部分
还有
<TEXTAREA class=black cols=30 name=address _extended=\"true\"></TEXTAREA>
xuzuning 2010-01-21
  • 打赏
  • 举报
回复

$s = "
邮箱:
<INPUT class=black value=@ size=30 name=email _extended=\"true\"> </TR> </TABLE> </DIV>
电话:
<INPUT class=black name=tel _extended=\"true\" value=ddd> </TR> </TABLE> </DIV>
地址:
<INPUT class=red name=address _extended=\"true\"> </TR> </TABLE> </DIV>
";

$s = strip_tags($s, '<input>');
$s = preg_replace("/(^|>).*(<|$)/isU", "$1$2", $s);

foreach(split('>', $s) as $v) {
if($v) {
preg_match_all("/(\w+)=([\"']?)(.+)\\2 /sU", $v, $r);
$tmp = array();
foreach($r[1] as $i=>$t) {
$tmp[$t] = trim($r[3][$i], '"');
}
$out[] = $tmp;
}
}
print_r($out);

Array
(
[0] => Array
(
[class] => black
[value] => @
[size] => 30
[name] => email
)

[1] => Array
(
[class] => black
[name] => tel
[_extended] => true
)

[2] => Array
(
[class] => red
[name] => address
)

)
LuciferStar 2010-01-21
  • 打赏
  • 举报
回复
补充,刚才的代码,执行后输出:
Array
(
[0] => Array
(
[0] => <INPUT class=black value=@ size=30 name=email _extended=\"true\">
[1] => class=black value=@ size=30 name=email _extended=\"true\"
)

[1] => Array
(
[0] => <INPUT class=black name=tel _extended=\"true\">
[1] => class=black name=tel _extended=\"true\"
)

)

你可以对$result[$i][1]进行空格和“=”的匹配拆分,得到每个字段和值。
LuciferStar 2010-01-21
  • 打赏
  • 举报
回复
你的INPUT很不规则。
可以用如下代码,匹配出所有INPUT,然后再细分吧。
<?php
$data=file_get_contents("1.html");
preg_match_all("/<INPUT(.*?)>/",$data,$result,PREG_SET_ORDER); //提取分页信息
print_r($result);
?>
vgy12304 2010-01-21
  • 打赏
  • 举报
回复
转化数组时,最好能出现一个name,就填一组记录,呼唤高手指点一下
vgy12304 2010-01-21
  • 打赏
  • 举报
回复
没有任何帮助,我格式不固定,还是谢谢你
不光
<INPUT class=black value=@ size=30 name=email _extended=\"true\">
还会有
复选框,单选框,多行文本,下拉菜单等等

但是这段字符串也有共同点的,都有name= class=等等

iwantnet 2010-01-21
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090703/13/517B5EE8-8215-42E8-A942-F6CE88684BFE.html

你看一下这个贴子吧!
vgy12304 2010-01-21
  • 打赏
  • 举报
回复
我要抓取html代码,原始形式是这个:
<!-- 用 JavaScript 绘制 5 个 div --><!-- 隐藏的 div ,用来修复不能拖到一个元素后面的 bug -->
<DIV style=\"FILTER: ; opacity: \" id=drag_2 class=drag_div _extended=\"true\" pagePosLeft=\"65\" pagePosTop=\"114\" lastMouseX=\"609\" lastMouseY=\"258\">
<DIV style=\"CURSOR: move\" id=drag_2_h class=drag_header _extended=\"true\">
<TABLE border=0 cellSpacing=0 cellPadding=0 width=\"100%\" _extended=\"true\">
<TBODY _extended=\"true\">
<TR _extended=\"true\">
<TD width=\"30%\" align=right _extended=\"true\">邮箱:</TD>
<TD width=\"70%\" _extended=\"true\"><INPUT class=black value=@ size=30 name=email _extended=\"true\"></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV style=\"FILTER: ; opacity: \" id=drag_4 class=drag_div _extended=\"true\" pagePosLeft=\"1331\" pagePosTop=\"198\" lastMouseX=\"614\" lastMouseY=\"242\">
<DIV style=\"CURSOR: move\" id=drag_4_h class=drag_header _extended=\"true\">
<TABLE border=0 cellSpacing=0 cellPadding=0 width=\"100%\" _extended=\"true\">
<TBODY _extended=\"true\">
<TR _extended=\"true\">
<TD width=\"30%\" align=right _extended=\"true\">电话:</TD>
<TD width=\"70%\" _extended=\"true\"><INPUT class=black name=tel _extended=\"true\"></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV style=\"TOP: 0px; LEFT: 0px\" id=col_1_hidden_div class=\"drag_div no_drag\" _extended=\"true\" pagePosLeft=\"71\" pagePosTop=\"160\">
<DIV style=\"CURSOR: move\" id=col_1_hidden_div_h _extended=\"true\"></DIV></DIV>

后来用的删除html标记
function delete_htm($scr)
{
global $str;
for($i=0;$i<strlen($scr);$i++)
{
if(substr($scr,$i,1)=="<")
{
while(substr($scr,$i,1)!=">")$i++;
$i++;
}
$str=$str.substr($scr,$i,1);
}
return($str);
}


剩下的就是这个
<!-- 隐藏的 div ,用来修复不能拖到一个元素后面的 bug -->


邮箱:
<INPUT class=black value=@ size=30 name=email _extended=\"true\"></TR></TABLE></DIV>

电话:
<INPUT class=black name=tel _extended=\"true\"></TR></TABLE></DIV>

</DIV>
iwantnet 2010-01-21
  • 打赏
  • 举报
回复

字符串:
$str="邮箱:
<INPUT class=black value=@ size=30 name=email _extended=\"true\"> </TR> </TABLE> </DIV>
电话:
<INPUT class=black name=tel _extended=\"true\" value=ddd> </TR> </TABLE> </DIV>
地址:
<INPUT class=red name=address _extended=\"true\"> </TR> </TABLE> </DIV>";
你的字符串是上面的形式,还是
邮箱:
<INPUT class=black value=@ size=30 name=email _extended=\"true\"> </TR> </TABLE> </DIV>
电话:
<INPUT class=black name=tel _extended=\"true\" value=ddd> </TR> </TABLE> </DIV>
地址:
<INPUT class=red name=address _extended=\"true\"> </TR> </TABLE> </DIV>
三行的形,放在文本中.

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧