1

PHPスクリプトで解析する大きなHTMLテキストがあります。次のテキストを検索(および画面に印刷)する必要があります。

<span style="color:COLOR">#</span>

<span class="close">#</span>

ここで、COLORは「赤」、「緑」、または「青」にすることができます。

それぞれ任意の色の3つのループを作成したので、現時点での私のコードは次のとおりです。

preg_match_all("'red\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);
foreach($match[1] as $val) {
     echo $val;
}
preg_match_all("'green\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);
foreach($match[1] as $val) {
     echo $val;
}
preg_match_all("'blue\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);
foreach($match[1] as $val) {
     echo $val;
}

すべて正常に動作しますが、これには2つの問題があります。

  1. このようにして、赤いタグの間のテキストのすべての部分を見つけ、次に緑のタグの間のテキストのすべての部分を見つけ、最後に青いタグの間のテキストのすべての部分を見つけます(ただし、テキストに表示される正確な順序でそれらを見つけたいです)。
  2. それらすべての繰り返されるコード...それは私の心を傷つけます。

そのため、OR条件を使用してテキストのすべての部分を検索する方法を見つける必要がありました。

次に、このコードを作成しました。

$patterns = array(
    'green\">#<\/span>(.*?)<span class=\"close\">#<\/span>',
    'red\">#<\/span>(.*?)<span class=\"close\">#<\/span>',
    'blue\">#<\/span>(.*?)<span class=\"close\">#<\/span>'
);

$rule= '/(' .implode('|', $patterns) .')/i'; 

$text = 'Lorem ipsum dolor sit amet, <span style="color:red">#</span>consectetur adipiscing elit<span class="close">#</span>. 
Vestibulum ante lectus, <span style="color:green">#</span>pellentesque ac accumsan sit amet, posuere tempor<span class="close">#</span> ligula.';

preg_match_all($rule, $text, $match);
foreach($match[1] as $val) {
    echo "<pre>".$val."</pre><br />";
}

画面に印刷されていると私が期待するもの:

consectetur adipiscing elit
pellentesque ac accumsan sit amet, posuere tempor

私が実際に得るもの:

red">#consectetur adipiscing elit#
green">#pellentesque ac accumsan sit amet, posuere tempor#

だから、私は明らかにパターンで何か間違ったことをしていますが、これを解決する方法を見つけることができません。何か助けはありますか?

4

2 に答える 2

1

これには代替を使用できます

(?:red|green|blue)\">#</span>(.*?)<span class=\"close\">#</span>
于 2012-12-19T11:56:35.830 に答える
0

「赤」、「緑」、「青」である必要がありますか? 「color:ANYTHING」じゃないの?

 preg_match_all("'color:.+?\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);
于 2012-12-19T11:58:22.313 に答える