0

私は質問に目を通し、自分の問題をよりよく理解しましたが、それでも答えは見つかりませんでした.

PHP の正規表現に問題があります。HTML ファイルの「alt」属性のすべてのテキストを取得しようとしています。考えられるすべてのタグ名 (img、input、および area) と、文字間のスペースや改行 (など<img alt = "Hello">) などのあらゆる種類の偶発事象を考慮しています。また、一致文字列は一重引用符または二重引用符で囲み、内部に他の (異なる) 引用符を含めることができることにも注意する必要があり<img alt="Alan's picture">ます<img alt='Example for the word "hello" in the text'>

これは私には難しくなってきているので (私は正規表現の初心者です)、得られたものをお見せします。文字クラス内で後方参照を使用しようとしていることに注意してください。これは間違った方法であることがわかりました (またはそう思います)。

'/<\s*(?:img|input|area)\s[^>]*alt\s*=\s*("|\')([^\1>]*)\1[^>]*>/siU'

また、StackOverflow で、このようなものに HTML パーサーを推奨する人もいますが、この方法でどれだけのリソースが消費されるか心配です。これはより良い考えだと思いますか?ありがとうございました!

4

2 に答える 2

2

Using a parser is definitely the way to go.

Regex are highly inappropriate for this type of tasks, and even Jon Skeet cannot parse HTML using regular expressions

于 2011-11-04T16:23:25.170 に答える
0

絶対にパーサーを使用する必要があります。これにはいくつかの理由があります。

  • HTML パーサー ライブラリは、正規表現では見逃される壊れた (または不正な形式の) HTML を説明できます。たとえば、一部の Web ページでは、次のように alt 属性に埋め込まれた引用符をエスケープできません。alt='why can't I do this'
  • パーサーは、エスケープされた文字を自動的に処理できます。例えば、alt="why&#32;the&#32;long&#32;space"
  • さらに、HTML パーサーが速度と API の利点を提供する可能性があります。

どのパーサーを使用する価値があるかについての提案については、StackOverflow の質問Robust, Mature HTML Parser for PHPを参照してください。

于 2011-11-04T16:26:19.627 に答える