2

はい、SO には何百もの [regex] [html] トピックがありますが、私がチェックした最初の 30 件は私の問題を解決するのに役立ちません。

サイト内のファイルへの合計 745 個のリンク (すべて相対リンクであり、相対リンクである必要があります) があります。これらすべてのリンクを見つけて、それらの前後にデータを追加する必要があります。また、リンク テキストをキャプチャして使用する必要があります。

私はいくつかの式を試しましたが、以下の正規表現は私が得ることができる最も近いものですが、十分ではありません.別のファイルへの他のhrefのいくつかのインスタンスを見つけ続け</a>、ファイルの.実際に気にします。

<a href="((.)*?)?myFile.html((.)*?)?>((.)*?)?</a>

上記では、ファイルへの相対パスと、存在する可能性のあるアンカー、および実際のリンク テキストを取得する必要があります。

どの正規表現を使用する必要がありますか?

関係ありませんが、検索には Adob​​e Dreamweaver を使用しています。

4

3 に答える 3

1

この正規表現を試してください: (更新)

href="([^"]*?)myFile\.html#?([^"]*).*?>(.*?)<\/a>

ここで説明されたデモ: http://regex101.com/r/lA6vB7

于 2013-02-12T20:27:01.077 に答える
1

まず、絶対にこれをしないでください: (.)*...またはこれ:(?:.)*

最初のものは一度に 1 文字を消費し、それをグループでキャプチャし、そのたびに以前にキャプチャした文字を上書きします。2 番目のものは、非キャプチャ グループを使用することでそのオーバーヘッドのほとんどを回避しますが、そのグループ内で一度に 1 文字しか一致しません。なぜわざわざ?それがしているのは、正規表現を乱雑にすることだけです。

?貪欲でないようにするために を追加し(.)*?ても、悪化することはありませんが、助けにもなりません。そして、それを別のグループ内に貼り付けて、そのグループをオプションにすること、つまり、壊滅的な後戻り((.)*?)?のレシピです。. しかし、パフォーマンスの考慮事項はさておき、量化子が添付されたキャプチャーグループを見ると、ほとんどの場合、作成者側の間違いであることがわかります。(参照)

あなたの質問に関しては、私の解決策はオスカーのものとほぼ同じであることがわかりました:

<a href="([^#"]*?a\.fparameters\.html)(?:#([^"]*))?">([^<>]*)</a>
于 2013-02-12T22:47:28.900 に答える
1

次の正規表現は、必要なものに対して機能するはずです。

<a href="([^"]*?a\.fparameters\.html)(#[^"]+?)?".*?>(.*?)<

次のような URL がある場合でも機能します。

<a href="a.fparameters.html">JOBMAXNODECOUNT</a>

持っていません#xxxx

いくつかの例:

<a href="a.fparameters.html#jobmaxnodecount">JOBMAXNODECOUNT</a>あなたが得るために:

  • グループ 1:a.fparameters.html
  • グループ 2:#jobmaxnodecount
  • グループ 3:JOBMAXNODECOUNT

一致<a href="commands/mjobctl.html#modify">mjobctl -m</a> to modify the job after it has been submitted. See the <a href="a.fparameters.html#rsvsearchalgo">RSVSEARCHALGO</a>するのは 1 つだけです。

  • グループ 1:a.fparameters.html
  • グループ 2:#rsvsearchalgo
  • グループ 3:RSVSEARCHALGO
于 2013-02-12T20:27:54.443 に答える