2010-03-25 32 views
3

我是正則表達式的相對新手(儘管我已經成功地使用了它們很多次)。 我想找到那個不名「.html」結尾的文件中的所有鏈接 我想出正則表達式是:正則表達式:希望找到所有不以「.html」結尾的鏈接

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

在記事本++,我的編輯,href=\"([^"]*)\"發現所有的鏈接(這兩個以「html」結尾,而那些不是)。 爲什麼不負面的後顧之憂?

我也試過前瞻:

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

但也不能工作。

任何人都可以幫忙嗎?

乾杯,卑躬屈膝

+9

我認爲Notepad ++不支持隱藏斷言。 – Gumbo 2010-03-25 11:09:29

+1

嘗試使用Notepad ++獲得正則表達式是非常難看的。我放棄了,有太多煩人的限制。 – pars 2010-03-25 12:34:52

回答

8

這正則表達式會正常工作,如果你使用PERL或PCRE(如的preg_match在PHP中)。然而,大多數人都不支持lookahead和lookbehind斷言,尤其是更簡單的正則表達式引擎,就像Notepad ++使用的那樣。幾乎所有的正則表達式引擎都只支持最基本的語法,如量詞,子模式和字符類。

你可以找到一個記事本+ +正則表達式引擎的文檔:http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions

+0

該文檔令人困惑,因爲它有一個關於lookarounds的部分,這似乎表明它們受支持。 – mellamokb 2012-10-30 19:06:26

1

你可以做一個正則表達式,做它,但它可能會過於複雜:

href=\"((([^"]*)([^h"][^"][^"][^"]|[^t"][^"][^"]|[^m"][^"]|[^l]))|([^"]|)([^"]|)([^"]|))\" 
0

謝謝大家許多。

最後,正則表達式確實不起作用。

我只是使用了一種解決方法,並用自己+「。html」替換了所有鏈接,然後用「.html」替換了所有「.html.html」的出現。

所以我.html

由於更換href=\"([^"]*)\"href="\1.html"然後.html.html反正拜倒

0

注意,記事本++(現在呢?)支持assertions這樣。 (我有2012年2月3日的Notepad ++ 6.3。)

我相信Regular Expressions documentation意味着兩個替代變體使用相同的PCRE方言:

  • 標準:Search | Replace(默認快捷鍵Ctrl H
  • 插件:TextFX | TextFX Quick | Find/Replace(默認快捷鍵Ctrl R
相關問題