1

崇高なテキスト2で正規表現を使用してリンクテキストを置き換えたい

私のリンクはこのように見えます

<a href="#" class="link link1">This is a text for link 1</a>
<a href="#" class="link link2">This is a text for link 2</a>
<a href="#" class="link link3">This is a text for link 3</a>

ページに100を超えるリンクがあります。

私はこのような正規表現を試しました。

<a href="#" class="link.+">.+</a>

動作しますが、タグとも一致します。

誰かがこのテキストだけを一致させる方法を教えてもらえますThis is a text for link *か?

4

3 に答える 3

3

ただし、なぜテキストだけを一致させたいのかわかりません。それが必要になる可能性のあるユースケースはほとんど考えられません。通常、ほとんどの交換シナリオでは、グループをキャプチャするだけで十分です。

タグ内のテキストにパターンがなく、タグに任意のクラスを含めることができる場合NO、そうすることはできません。SublimeTextは、可変長ルックビハインドをサポートしていないBoostライブラリを使用しているようです。

属性内のリンク番号を除いて、タグが一貫している場合(スペースまですべてが同じ)、classある程度可能である可能性があります。

(?<=<a href="#" class="link link\d">).+?(?=</a>)

リンクの後に番号クラスが2桁ある場合は、対応する後読みを追加する必要があります。

(?:(?<=<a href="#" class="link link\d">)|(?<=<a href="#" class="link link\d\d">)).+?(?=</a>)

\d{1,2}後読みでは機能しません。長さは有限ではありませんが、正規表現エンジンはそれをサポートしていません。)

作業用スクリーンショット

于 2013-02-11T14:15:30.960 に答える
1

彼の回答でnhahtdhが示唆しているように、後読みや先読みを使用せずに置換を行うことができます。この正規表現を使用して置換を行います。

正規表現を検索:

(<a href="#" class="link.+?">)[^<]+(\d)(</a>)

交換用ストリング:

\1Link number \2 has been replaced\3

それはこれを置き換えるでしょう:

<ahref = "#" class="linklink1">これはリンク1のテキストです</a>
<ahref = "#" class="linklink2">これはリンク2のテキストです</a>
<ahref = "#" class="linklink3">これはリンク3のテキストです</a>

これに:

<ahref = "#" class="linklink1">リンク番号1が置き換えられました</a>
<ahref = "#" class="linklink2">リンク番号2が置き換えられました</a>
<ahref = "#" class="linklink3">リンク番号3が置き換えられました</a>

上記の例は、アンカーテキストのキャプチャグループを一致させることができることも示しています。不要な場合は、キャプチャグループを削除して、それに応じてキャプチャグループ番号を変更できます。

于 2014-01-17T03:08:43.030 に答える
0

マッチングの場合これは、リンクの後にスペースが続き、その後に数字が続くテキストです。を使用しますThis is a text for link \d+

編集:リンクの開始タグと終了タグのペア間でテキストを照合するには、次のようなキャプチャグループを使用します。

<a href="#" class="link.+?">(.+)</a>

$1タグ間のテキストと一致します。

于 2013-02-11T14:04:15.243 に答える