1

次のようなプレーンテキスト/HTMLコンテンツがあります。

Title: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Snippet: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Category: Lorem ipsum dolor sit amet, consectetur adipiscing elit.

そして、「 Snippet: 」と書かれている行とそれに続くテキストだけを一致させたいのですが、その行のみ、他には何もせず、検索で大文字と小文字を区別しません。正規表現で試しましたが、最終的には今すぐ DOMDocument を使用してみてください。どうすればこれを行うことができますか?

4

2 に答える 2

2

DOMが関係している場合は、コメントでリンクした重複を参照してください。

それ以外の場合は、正規表現を探すだけです。

$line = preg_match('~(^Snippet:.*$)~m', $text, $matches) ? $matches[1] : NULL;

デモと正規表現の説明:

~  -- delimiter
 (  -- start match group 1
  ^  -- start of line
    Snippet:  -- exactly this text
    .*  -- match all but newline
  $  -- end of line
 )  -- end match group 1
~  -- delimiter
m  -- multiline modifier (^ matches begin of line, $ end of line)
于 2012-05-07T16:23:59.720 に答える
1

私はあなたの問題についていくつかの詳細を知らないので、私の答えは適切ではないかもしれません。解析する必要のあるコンテンツのサイズに基づいて、これはオプションではないと判断できます。また、質問から、htmlコンテンツがどこに配置されるかが明確ではないため、DOM解析を使用しないこのソリューションを作成しました。

考えられる解決策は、配列で解析する行を取得することです。その後、配列をフィルタリングして、ルールに一致しない行を結果から削除できます。

サンプルは次のようになります。

//this is the content
$text = 'Title: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Snippet: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Category: Lorem ipsum dolor sit amet, consectetur adipiscing elit.';

//get the lines from your input as an array.. you could acheive this in a different way if, for example, you are reading from a file
$lines = explode(PHP_EOL, $text);

// apply a cusom function to filter the lines (remove the ones that don't match your rule)
$results = array_filter($lines, 'test_content');

//show the results
echo '<pre>';
print_r($results);
echo '</pre>';

//custom function here:
function test_content($line)
{
    //case insensitive search, notice stripos; 
    // type strict comparison to be sure that it doesn't fail when the element is found right at the start
    if (false !== stripos($line, 'Snippet'))
    {
        return true;
    }
    return false;//these lines will be removed 
}

そのコードは、$results配列の2行目である1つの要素のみを返します。

あなたはここでそれが働いているのを見ることができます:http://codepad.org/220BLjEk

于 2012-05-07T15:40:42.157 に答える