2017-12-01 9 views
1

私はいくつかのH2タグを取得しようとしています。preg match all - 不明な修飾子

しよう:

$url = 'http://example.com'; 
preg_match_all('/<h[0-6]>([^</h[0-6]>*)</h/i', $url, $matches); 
print_r($matches); 

を中にスローされるエラー:

警告:preg_match_all():未知の修飾子 'H'

どんなに不明を削除されているもの修飾子は次の文字に変わります。

私はこれに関する他の方法の提案を受けています。

+3

ちょうど[DOMパーサ]を使用します(http:/ /php.net/manual/en/class.domdocument.php)普通の人のようです。 – PeeHaa

+4

[HTML/XMLをどのように解析してPHPで処理しますか?](https://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php)私はそれが一緒に行くかどうかのopの選択肢のためにフラグを立てていない。 – FirstOne

+1

また、変数にURLを入れるだけでは、ウェブからページを魔法のように取得することはありません。 – PeeHaa

答えて

1

これは、デリミタ(文字列の前後に置くもの)として '/'を使用するために発生します。完全なパターンは、以下の構造を有する:

[delimiter][pattern][delimiter][flags] 

あなたの最初の文字が検出されたときに次の「/」それはフラグとして見られているの後にそう、それは終わりの区切り文字とすべてと見られている、「/」であります。あなたは「/」sのを逃れることができますが、簡単に解決策は、たとえば、あなたがあなたのパターンで使用することはありません何かに区切り文字を変更するには、次のようになります。

preg_match_all('#<h[0-6]>([^</h[0-6]>*)</h#i', $url, $matches); 
+0

ありがとう、これは働いた。 –

+0

これは同じページから複数のH2タグを取得できますか? –

+0

@SaucedApples preg matchを使用すると、区切り文字の間の正規表現が正しい場合には、すべてすべてが一致するはずです。そうでない場合は、次のように試してみてください: #([^(?:)] *) user3053216

1

Perl互換正規表現はパターンのPerl構文をエミュレートします。つまり、各パターンは区切り文字のペアで囲む必要があります。通常、the slash (/)文字が使用されます。たとえば、/pattern/です。あなたは、パターン内の区切り文字を使用する場合は、区切り文字でない任意/\/になるように、あなたは、\でエスケープする必要があることを意味し

。だから、

'/<h[0-6]>([^</h[0-6]>*)</h/i' 

は通常、角カッコは文字クラスに一致するように私はまた、[を逃れた

'/<h[0-6]>(\[^<\/h[0-6]>*)<\/h/i' 

お知らせとなります。

また、~のような別の区切り文字を使用することもできます。