0

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

我收到以下错误:

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

我做错了什么?

4

2 回答 2

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,然后在冒号上拆分,然后删除任何周围的空格。

于 2012-09-17T18:01:10.230 回答
0

您的模式需要以分隔符开始和结束;#如果我没看错的话,看起来你正在使用,所以你应该有$pattern = '#</b></br>.*:</b>#';.

另外,你把事情搞混了;*不是正则表达式中的简单通配符。如果您的意思是“任意数量的任意字符”,您需要的模式是.*. 我已经在上面包含了这个。

于 2012-09-17T18:02:22.740 回答