2011-07-11 15 views
2

私はこの正規表現の表現に苦労していますが、私は修正を見つけることができません。私は、javascriptベースのツールを使って式をテストして書きました。 PHPページに入れてpregとマッチングすると、結果が異なります。regexは特定の属性クラスを持つimgタグに一致します

/(<img\b src=)"([^"]+)"(.* class=".*colorme(?:.|[^"]*)"[^>]+>)/ 

ここでテストする例は、最初に一致させるべきではありません。これはすべてjavascriptで動作しますが、phpではなくclassクラス= "colorme"だけが一致します。何か不足していますか?一般的に

<img src="http://test.jpg" class="then" border="0" width="123" height="83"> 

<img src="test.jpg" border="0" alt="well watch picture" alt="tersts" class="really colorme" width="228" height="138"> 

<img src="test.jpeg" class="colorme then" border="0" width="123" height="83"> 

<img src="test" border="0" width="123" height="83" class="pic colorme then" with="me"> 

<img src="tests" border="0" class="colorme" width="123" height="83"> 
+6

:**悪い考え**。 HTMLパーサとXPathを使用してください! JavaScriptでも、DOMを活用できます。 –

+0

JavaScriptとPHPの正規表現のバリエーションは異なります。 (正規表現にはさまざまなバリエーションがあります)* JavaScriptで動作させても、PHPでは動作しません。構文は少し異なります。これとは別に、HTMLは標準的な言語ではないので、正規表現を単独で使用して確実に処理することはできません。あなたは近づくことができますし、あなたが解決しようとしている問題に固有の限られたユースケースのために、あなたがしようとしていることを十分に十分に行うことができます。 –

+0

私はregex buddyを推薦することができます:http://www.regexbuddy.com/ - 正しい表現を識別してテストするのに役立ちます。準備が整うと、選択した言語に対して正しい表現を見ることができます。 – Andron

答えて

1

での2番目の回答(300+のスコアが1)を見てお勧めしますDOM &なし空想表現...

<?php 
$doc =<<<DEMO 
<img src="http://test.jpg" class="then" border="0" width="123" height="83"> 
<img src="test.jpg" border="0" alt="well watch picture" alt="tersts" class="really colorme" width="228" height="138"> 
<img src="test.jpeg" class="colorme then" border="0" width="123" height="83"> 
<img src="test" border="0" width="123" height="83" class="pic colorme then" with="me"> 
<img src="tests" border="0" class="colorme" width="123" height="83"> 
DEMO; 

$xml = new DOMDocument(); 
//Or you could use for locally saved files 
//@$xml->loadHTMLFile('savedfile.html'); 
@$xml->loadHTML($doc); 
foreach($xml->getElementsByTagName('img') as $image) { 
    if(strstr($image->getAttribute('class'),'colorme')==true){ 
     $images[] = $image->getAttribute('src'); 
    } 
} 
print_r($images); 
?> 

出力:(この複雑さの)HTML要素を見つけるために正規表現を使用した

Array (
    [0] => test.jpg 
    [1] => test.jpeg 
    [2] => test 
    [3] => tests) 
0

、どの2つの正規表現の言語は同じではない、とあなたが本当に他に1をコピーして貼り付けることができないようにJavascriptとPHPがそれらを処理する方法間の広大な違いが、あります。私は正直なところ、XPathのようなものでDOM Documentオブジェクトを使うのはずっと簡単だと思っていますが、あなたの目的のために正規表現はです。です。 1つのタグだけにマッチさせようとするならば、正規表現を作ることができます。それは、あなたが忘れてしまったような、正規表現のフィールドの欠点を見ることを開始するよりも、

だから、結論では、あなたは HTMLパーサーを使用する必要がありますが、あなたは正規表現を使用することができます。どちらの方法も法律はありません。私はあなたがこのためにDOMとXPathを使用していますが、正規表現としてそれをしたい場合は、このページ

Regular expression pattern not matching anywhere in string

関連する問題