2

ColdFusion を使用して、以下の文字列から「私のリンク エイリアス」の部分を取得するにはどうすればよいですか? 役立つ場合に備えて、常に「エイリアス」属性を使用します。

<a href="http://www.google.com" alias="my link alias">learn more</a>
4

2 に答える 2

3

一般に、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 パーサーを使用してください。

于 2013-06-15T11:26:16.597 に答える
3

説明

タグを必要とするこの正規表現を使用できa、で始まる他のタグと誤って一致することはありませんa。また、属性の値を二重引用符または単一引用符で囲むこともできます。ここでの肯定的な先読みの値は、この特定の質問ではおそらく失われます。これは、単一の属性のみをチェックしているためです。複数の属性をキャプチャする場合は、複数の先読みを使用して属性を任意の順序でキャプチャできます。

<a\b(?=[^>]*\s\balias=(["'])((?:(?!\1)|.)*)\1)[^>]*>(.*?)<\/a>

ここに画像の説明を入力

グループ

グループ 0 は、開始アンカー タグから終了タグまでの文字列全体を取得します。

  1. 使用される引用符のタイプを取得して、閉じたときに正しく一致するようにします
  2. エイリアス属性の値を取得します
  3. アンカー タグの開始タグと終了タグの間の値を取得します。これは、質問が編集される前に、リクエスタからの元の未編集の質問の考えられる意図をカバーしています。

例の一致

与えられた入力テキスト:<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
于 2013-06-15T03:28:06.227 に答える