ColdFusion を使用して、以下の文字列から「私のリンク エイリアス」の部分を取得するにはどうすればよいですか? 役立つ場合に備えて、常に「エイリアス」属性を使用します。
<a href="http://www.google.com" alias="my link alias">learn more</a>
ColdFusion を使用して、以下の文字列から「私のリンク エイリアス」の部分を取得するにはどうすればよいですか? 役立つ場合に備えて、常に「エイリアス」属性を使用します。
<a href="http://www.google.com" alias="my link alias">learn more</a>
一般に、regex use jsoup (または別の HTML パーサー) を使用しないでください。基本的には次のとおりです。
<cfset Alias = jsoup.parse(input).select('a[alias]').attr('alias') />
詳細については、Henryが Ben Nadel によるブログ投稿へのリンクを投稿しました。Ray Camden によるブログ投稿もあります。SO で検索すると、有益な情報が記載された jSoup/CF に関する質問がたくさん見つかります。
指定した形式の文字列のみを処理する場合 (つまり、HTML のチャンク全体ではなく、A タグのみ)、次のように簡単に処理できる可能性があります。
<cfset Input = '<a href="http://www.google.com" alias="my link alias">learn more</a>' />
<cfset Parts = Input.split('\salias="',2) />
<cfset Alias = ListFirst(Parts[2],'"') />
または、可能なスペースと一重引用符または二重引用符を処理するには:
<cfset Input = '<a href="http://www.google.com" alias="my link alias">learn more</a>' />
<cfset Parts = Input.split('\salias\s*=\s*(?=["''])',2) />
<cfset Alias = ListFirst( Parts[2] , Left(Parts[2],1) ) />
ただし、マークアップがどうなるかわからない場合は、代わりに強力な HTML パーサーを使用してください。
タグを必要とするこの正規表現を使用できa
、で始まる他のタグと誤って一致することはありませんa
。また、属性の値を二重引用符または単一引用符で囲むこともできます。ここでの肯定的な先読みの値は、この特定の質問ではおそらく失われます。これは、単一の属性のみをチェックしているためです。複数の属性をキャプチャする場合は、複数の先読みを使用して属性を任意の順序でキャプチャできます。
<a\b(?=[^>]*\s\balias=(["'])((?:(?!\1)|.)*)\1)[^>]*>(.*?)<\/a>
グループ 0 は、開始アンカー タグから終了タグまでの文字列全体を取得します。
与えられた入力テキスト:<a href="http://www.google.com" alias="my link's alias">learn more</a>
[0] => <a href="http://www.google.com" alias="my link's alias">learn more</a>
[1] => "
[2] => my link's alias
[3] => learn more