如何使用php preg_split和html字符串

时间:2012-09-17 17:56:25

标签: php html regex

我正在尝试解析一个格式错误的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);

我收到以下错误:

  

分隔符不能是字母数字或反斜杠

我做错了什么?

2 个答案:

答案 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>#';

另外,你把事情混在一起; *不是正则表达式中的简单通配符。如果您的意思是“任意数量的任何字符”,您需要的模式是.*。我已将此包括在内。