2011-11-16 7 views
1

私はURLからCSSを掻き集める小さなアプリを開発しています。ここでそれをデモ: はhttp://grahamthomas.me/temp/scrape/test/get-contents.php?url=http://www.grahamthomas.mePHPが配列の値と一致する

スクリプトは1.スタイルシートを削ると内容2.インラインスタイル3スタイルシートに定義インラインを引く

あなたが見る出力はすべてのスタイルの内容である(すなわち@import)見つかりました。そして、それは2つの配列の出力です。 1つはセレクタで、もう1つはセレクタの内容です。

ので、印刷結果がprint文としてこれで、forループから、次のとおりです。

echo $selectors[$i] . "{" . $sstyles[$i] . "}<br>"; 

ポイントへの:私は掻き取っページからの入力にdiv要素をしようとし、そのスタイルをプリントアウトしています。私はので、CSSの構文の問題に実行しているよ

if (strpos($pull, "#work") == true) { 
    echo $pull . "<br>"; 
    } 

:私は、私が興味いずれかのセレクターの配列を検索するin_arrayとstr_posを使用してみました。上記のループは機能しますが、#workは親として他のスタイルで参照できるため、これらの '子'も出力します。私は#workスタイルそのものを印刷することに興味があります。私が作ってみた

#body-container #work #thumb-hwy a { } 
#body-container #work #thumb-bjn a { } 
#body-container #work #thumb-wtfc a { } 

解決策は以下のとおりです。1.文字列を解析し、何も私は(すなわち#workを受け入れますが、#nextを#workない)を探してるキーの後にありません確認してください。または、ターゲットキーを検索し、他のCSSスタイルインジケータが続くことを確実にするREGEXを介して値を実行し、スタイル自体のみを実行します。

これを行う方法上の任意のヘルプ、または改善のロジックアイデアが高く評価されています!私はこれに苦しんでいます。

答えて

1

別の質問を見ながら私が見つけた素敵な解決策は、基本的に何であるnegative lookaheadを行うための素晴らしい方法を提供しますあなたが正規表現に行っていればやろうとしている。

は、この正規表現を使用してみてください:応答グレッグのための

/(\#work)(?!\#[\b|\-]+$)/ 
+0

おかげで、ネストされたような形式で記述されたときに、特定のセレクタの値を引き出す方法を見ることができませんでした。 –

+0

いつでも、喜んで助けました! –

0

あなたはあなたの中を確認するには何もあなたが探しているものの後がないことをregexでいる、空白の文字列をトリミングすることをお勧めおそらくその初。次に、あなたの検索語が始まりと終わりの文字^$を使用する前または後に何もないことを確認します。 このようなものが得られるはずです。 /^#work$/

正規表現を使用する際の問題は、.とその他の特殊文字です。

私はあなたがこのような本物のCSSパーサーを使用しようとしているオフ最善だと思う:https://github.com/sabberworm/PHP-CSS-Parser

+0

感謝を。私はCSSTidy(http://csstidy.sourceforge.net/)を使っていましたが、実際にはパーサーを使ってCSSを実行しています。しかし、私はすぐに#var #var #var .classiwant完全に働いたmmmshuddup –

関連する問題