2009-09-02 3 views
1

は、私は、ユーザーがヘッダに正気なアプローチを取ることを決定した場合、これは素晴らしい作品正規表現は

/<[hH][1-3][^>]*>(.*?)<\/[hH][1-3]>/ 

いくつかのH1、H2、またはH3タグ内の文字列を取得する必要があると言うことができます文字列内の文字列内の文字列を検索するには:

<h1>My Header</h1> 

私のユーザーを知っているが、太字、斜体、下線付きのh1が必要です。そして、彼らは彼らがそれをするのを手助けするためにtinyMCEを詰まらせることがあります。 TinyMCEの出力になります。

<h1><b><span style='text-decoration: underline'><i>My Hideous Header</i></span></b></h1> 

だから私の質問は次のとおりです。

は、同様にどのように私は、H1、H2、H3または内部の文字列を取得します、その後、周囲の他のタグの任意の量の内側?構文解析HTMLはHTMLパーサーの仕事です(私は人々があなたを教えてくれると確信しているとして)以来

おかげで、 ジョー

+1

これはどうですか? '

My Hideousヘッダー

'埋め込まれた ''タグで完全なタイトル文字列を取得しますか? –

答えて

1

あなたは、PHPにいる場合は、あなたの正規表現を使用することができます。その後、内部のすべての狂気を取り除くためにstrip_tags()関数を使用して撮影した結果を渡す

/<[hH][1-3][^>]*>(.*?)<\/[hH][1-3]>/

を。

PHPでない場合は、タグを削除するregexp replaceによって結果を渡すことができます。何かのように置き換える /<\/?[^>]+?>/ 空の文字列で。

3
/<(h[1-3])[^>]*>(?:.*?>)?([^<]+)(?:<.*?)?<\/\1>/i 

恐ろしく、それを破るのケースを作るにはあまりにも難しいことではありません、正規表現ではありませんが、あなたの与えられたケースと様々な同様のもので動作します。

+0

+1、特に "この正規表現を使用しないでください"のコメント –

+0

+1と同じ理由でsimonn! – TrueWill

-1

あなただけ最終的にネストされたテキストは、あなただけでヘッダータグ内のすべてのタグをドロップする可能性がキャプチャしたい場合:

/<([hH][1-3]).*>(.*?)<.*\/$1>/ 

テストされていないが、私はそれが動作するはずだと思います。

+1

'(。*?)'は何にもマッチすることが許されず、貪欲な '。*'のおかげで、それはまさにそれと同じです。 –