他のhtmlも含めてemタグの間に文字列を取得したい。
例えば:
<em>UNIVERSALPOSTAL UNION - International Bureau Circular<br />
By: K.J.S. McKeown</em>
出力は次のようになります。
UNIVERSALPOSTAL UNION - International Bureau Circular<br />
By: K.J.S. McKeown
私を助けてください。
ありがとう
他のhtmlも含めてemタグの間に文字列を取得したい。
例えば:
<em>UNIVERSALPOSTAL UNION - International Bureau Circular<br />
By: K.J.S. McKeown</em>
出力は次のようになります。
UNIVERSALPOSTAL UNION - International Bureau Circular<br />
By: K.J.S. McKeown
私を助けてください。
ありがとう
次のように正規表現関数を使用します。
REMatch("(?s)<em>.*?</em>", html)
参照: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=regexp_01.html
(?s) は、入力テキストが改行を含んでいても 1 行として解釈されるように、モードを単一行に設定します。これはおそらくデフォルトなので(よくわかりません)、省略できます。Peter がコメントで指摘したように、これはデフォルトではないため、設定する必要があります。
は との間の.*?
すべての文字に一致し<em>
ます</em>
。乗数の後のクエスチョン マークは「貪欲ではない」ため、可能な限り少ない文字が一致します。これは、入力 html に次のようなものが含まれている場合に必要です<em>foo</em><em>bar</em>
。それ以外の場合は、最も外側の<em></em>
タグのみが考慮されます。
返された配列には、見つかったすべての一致、つまり、<em>
タグにあった html を含むすべてのテキストが含まれます。
</em>
これは、属性テキストとしても発生し、誤って html エンコードされていない状況で失敗する可能性があることに注意してください<em><a title="Help for </em> tag">click</a></em>
。正規表現は完全な HTML/XML パーサーを置き換えることはできません。100% の精度が必要な場合は、http: //livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_t-z_23 の使用を検討してください。 html
入力が正確に上記の形式である場合、正規表現は必要ありません - 外側のタグを削除するだけです:
<cfsavecontent variable="Input">[text from above]</cfsavecontent>
<cfset Output = mid( Input, 4 , len(Input) - 9 />
入力がこれ以上の場合 (つまり、HTML の重要な部分または完全な HTML ドキュメント)、正規表現は依然として理想的なツールではありません。代わりに、JSoupなどの HTML パーサーを使用する必要があります。
<cfset jsoup = createObject('java','org.jsoup.Jsoup') />
<cfset Output = jsoup.parse(Input).select('em').html() />
(CF8 では、このコードでは jsoup JAR ファイルを CF の lib ディレクトリに配置するか、JavaLoaderなどのツールを使用する必要があります。)
特定のタグの後に続くテキストを削除する必要がありました。HTML コンテンツは、5 つの異なる言語に対応するデータベースから動的に生成されました。だから私は私を助けるためにdivタグしか持っていませんでした。REMatch("(?s).*?", html) が機能しなかった理由がわかりません。しかし、ベンはここで私を助けてくれました ( http://www.bennadel.com/blog/769-Learning-ColdFusion-8-REMatch-For-Regular-Expression-Matching.htm )。私のコードは次のようになります:
<cfset extContentArr = REMatch("(?i)<div class=""inlineBlock"" style=""margin-right:30px;"">.+?</div>",qry_getContent.colval) />
<cfif !ArrayIsEmpty(extContentArr)>
Loop the array and do whatever you need with the extract , I just deleted them.
</cfif>