2017-01-16 12 views
0

コードからHTMLタグを取得したいのですが、開始タグと終了タグの間の文字列のみを指定します。PHPで正規表現を使用しているときにHTMLタグが一致しません

<? 
$string = 'this is <em>first</em> test'; 

preg_match('/<.+?>/', $string, $matches); 

echo '<pre>'; 
    print_r($matches); 
echo '</pre>'; 
?> 

このコードは私に<em>最初</em>を与えるべきではなく、私は唯一の配列から事前に

感謝:)

+4

それを行うための最善の方法は、正規表現を使用しないことです。 PHPでHTML/XMLをどのように解析して処理するのですか?(http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php) –

+0

' ''は前の文字/グループの1つ以上であり、 '?'は次の文字の最初のインスタンスでのマッチングを停止します。例えばあなたが '。+? 'をグループ化していれば、最初のキャプチャグループに' em'を入れていたはずです。グループ0はすべて一致しています。パーサーに行ってください。 – chris85

+0

@AlexK。ありがとう。 – GhusiMushi

答えて

0

あなたは、次のパターンを検索することができ最初を得る:

<[^<>]+?>[^<>]*?<\/[^<>]+?> 

ネストされていないHTML(例: this is <em>first</em> test)、ネストされたものではありません。あなたは確かにコメントで言及されているように、あなた自身がHTMLパーザを探して、これをしないでください。ここで

は、実行可能な例である:

var text = 'this is <em>first</em> test'; 
 
var match = text.match(/<[^<>]+?>[^<>]*?<\/[^<>]+?>/g); 
 
console.log(match);

関連する問題