我正在尝试解析一个格式错误的html表:
其中几行是:
Food:</b> Yes<b><br>
Pool: </b>Beach<b></b><b><br>
Centre:</b> Yes<b><br>
在使用Xpath花费大量时间之后,我认为将上述文本拆分为使用preg_split
并从那里进行解析可能更好。
我认为可行的模式使用:
<\b><\br>*: <\b>
我的代码如下:
$pattern='</b></br>*:</b>';
$pattern=preg_quote($pattern,'#');
$chars = preg_split($pattern, $output);
print_r($chars);
我收到以下错误:
分隔符不能是字母数字或反斜杠
我做错了什么?
答案 0 :(得分:1)
试试这个:
$pattern='</b></br>*:</b>';
$pattern=preg_quote($pattern,'#');
$chars = preg_split('#'.$pattern.'#', $output);
print_r($chars);
preg_quote
函数只是让它安全地转义,它实际上并没有为你添加分隔符。
正如其他人肯定会指出的那样,使用正则表达式不是解析HTML的好方法:)
你的正则表达也不符合你的意愿。这是一个可能适合您输入的版本:
$in = " Pool: </b>Beach<b></b><b><br>";
$out = explode(':', strip_tags($in));
$key = trim($out[0]);
$value = trim($out[1]);
echo "$key = $value\n";
这将删除所有HTML,然后在冒号上拆分,然后删除任何周围的空格。
答案 1 :(得分:0)
你的模式需要以分隔符开始和结束;如果我正确地阅读此内容,您似乎正在使用#
,因此您应该$pattern = '#</b></br>.*:</b>#';
。
另外,你把事情混在一起; *
不是正则表达式中的简单通配符。如果您的意思是“任意数量的任何字符”,您需要的模式是.*
。我已将此包括在内。