2

フォームを作成しましたが、フォームの一部の行がデフォルト値で空白になる可能性があります。フォーム出力を検索し、不要であることがわかっているビットを削除する方法を見つけようとしています-次のようになります:

<tr bgcolor="#FFFFFF">
<td>2E</td>
<td id="8003">-800</td>
</tr>

いくつかのビットで str_replace() を効果的に使用しましたが、私の主な問題は、 bgcolor="#FFFFFF" が異なる 16 進数値に変更され、さらに

私が推測するすべての可能な結果に対して str_replace() を書くことができましたが、このようなものに対する preg_replace ソリューションはありますか? それはかなり複雑な正規表現でなければなりません。

4

4 に答える 4

6

で正規表現置換を使用できますpreg_replace()。たとえば、可変カラー文字列を使用して、存在する場合と存在しない場合がある bgcolor 属性を削除するには、次のようにします。

$s = preg_replace('! bgcolor="#[0-9a-fA-F]{6}"!', '', $s);

ただし、いつものように、正規表現を使用して HTML を解析または処理することはお勧めしません。多くのことがこれでうまくいかない可能性があります:

  • 3 文字のカラー コード。
  • 属性の一重引用符;
  • 属性に引用符はありません。
  • 可変空白;
  • 大文字の属性。
  • 色の名前;
  • rgb(N,N,N) およびその他の有効な形式。
  • 等々。

そして、それはあなたの問題の限られたサブセットのためだけです.

DOM 処理メソッドを使用する方がはるかに堅牢です。PHP にはいくつかのバリエーションがあります。PHP と DOM を使用して HTML を解析するを参照してください。

于 2009-10-15T13:45:40.620 に答える
3

後で文字列置換で変更する必要なく、php で正しい html を生成できませんでしたか?

多分いくつかの IF ELSE ステートメントで。

それは私にはより良いアプローチのようです。

于 2009-10-15T13:46:14.100 に答える
1

16 進数の文字列に一致する正規表現は、実際には非常に簡単です。

/[0-9a-fA-F]+/

HTML パーサーを使用して不要なノードを削除する必要があることをおそらく耳にするでしょう。そうする必要があるかもしれませんが、入力文字列がどのようになるかを知っている場合は、そうではないかもしれません。

例の最初の行と一致させるには、次の正規表現が必要です。

preg_replace("/<tr bgcolor=\"#[0-9a-fA-F]+\">/", '', $string)
于 2009-10-15T13:47:00.137 に答える
0

Can you not just check whether the field is "blank" in the code before you get to trying to display it? or put in some logic to not output that if it's blank, don't output it?

于 2009-10-15T13:45:44.880 に答える