0

不正な形式のhtmlテーブルを解析しようとしています。

これのいくつかの行は次のとおりです。

  Food:</b> Yes<b><br>
  Pool: </b>Beach<b></b><b><br>
  Centre:</b> Yes<b><br>

preg_splitXpathでこれに多くの時間を費やした後、上記のテキストを使用する行に分割し、そこから解析する方がおそらく良いと思います。

私がうまくいくと思うパターンは以下を使用します:

<\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 に答える