3

私は正規表現の比較的初心者です (ただし、正規表現を何度も使用して成功しています)。ドキュメント内の「.html」で終わらないすべてのリンクを検索したい 思いついた正規表現は次のとおりです。

href=\"([^"]*)(?<!html)\"

私のエディタである Notepad++ では、href=\"([^"]*)\"すべてのリンク (「html」で終わるものとそうでないものの両方) を見つけます。否定的な後読みが機能しないのはなぜですか?

私も先読みを試みました:

href=\"[^"]*(?!html\")

しかし、それもうまくいきませんでした。

誰でも助けることができますか?

乾杯、うなり声

4

5 に答える 5

8

PERL または PCRE (PHP の preg_match など) を使用している場合、この正規表現は正常に機能します。ただし、先読みアサーションと後読みアサーションは、ほとんどの場合、特に Notepad++ で使用されるような単純な正規表現エンジンではサポートされていません。量指定子、サブパターン、文字クラスなどの最も基本的な構文のみが、ほぼすべての正規表現エンジンでサポートされています。

notepad++ 正規表現エンジンのドキュメントは、http ://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions にあります。

于 2010-03-25T11:19:44.263 に答える
1

編集: Notepad++ は SciTE 正規表現エンジンを使用しており、ルックアラウンド式をサポートしていません。

詳細については、こちらをご覧ください http://www.scintilla.org/SciTERegEx.html


元の回答

^.*(?<!\.html)$

于 2010-03-25T11:12:06.247 に答える
1

それを行う正規表現を作成することはできますが、おそらく複雑すぎるでしょう:

href=\"((([^"]*)([^h"][^"][^"][^"]|[^t"][^"][^"]|[^m"][^"]|[^l]))|([^"]|)([^"]|)([^"]|))\"
于 2010-03-25T12:08:25.537 に答える
0

どうもありがとうございました。

結局、正規表現は実際には機能しませんでした。

単に回避策を使用し、すべてのリンクを自分自身+ "。html"に置き換えてから、出現するすべての".html.html"を".html"に置き換えました。

だから私はに置き換えhref=\"([^"]*)\"href="\1.html"次に.html.html.html

とにかくありがとう、grovel

于 2010-03-25T13:12:40.620 に答える
0

Notepad++ (現在?) は、このようなアサーションをサポートしていることに注意してください。(私は 2012 年 2 月 3 日付けの Notepad++ 6.3 を持っています。)

正規表現のドキュメントは、両方の置換バリアントが同じ PCRE 方言を使用していることを暗示していると思います。

  • 標準: Search | Replace(デフォルトのショートカットCtrl H)
  • プラグイン: TextFX | TextFX Quick | Find/Replace(デフォルトのショートカットCtrl R)
于 2013-03-28T16:04:05.300 に答える