我怎麼會讓一個正則表達式的字符「<」匹配後面沒有(「a」或「時間」或「強」)正則表達式 - 如何匹配('a'或'em'或'strong')之後的字符'<'?
所以<hello
和<string
將匹配,但<strong
不會。
更新:順便說一句,我使用的語言是JavaScript
我怎麼會讓一個正則表達式的字符「<」匹配後面沒有(「a」或「時間」或「強」)正則表達式 - 如何匹配('a'或'em'或'strong')之後的字符'<'?
所以<hello
和<string
將匹配,但<strong
不會。
更新:順便說一句,我使用的語言是JavaScript
試試這個:
<(?!a|em|strong)
您使用negative lookahead,爲此,最簡單的形式是(這個問題):
<(?!a|em|strong)
的一個問題與那就是它會忽略<applet>
。處理這種情況的一種方法是使用\b
,它是一個零寬度表達式(意思是它不捕獲任何輸入),它將單詞與非單詞或非單詞到單詞的過渡相匹配。單詞字符是[0-9a-zA-Z_]
。所以:
<(?!(a|em|strong)\b)
如果您正則表達式引擎支持它,使用負前向斷言:這看起來未來的字符串,併成功是否會不匹配;但是,它不會消耗任何輸入。因此,您需要/<(?!(?:a|em|strong)\b)/
:匹配<
,然後成功,如果不存在a
,em
或strong
,然後是分詞符\b
。
關於單詞中斷的有趣點,儘管OP沒有說明是否需要 – 2010-04-25 01:01:32
雖然安德魯的回答顯然更勝一籌,之前,我也得到了它與[^(?:a|em|strong)]
工作。
+1我認爲它會爲Perl兼容正則表達式語法。 (對於其他的語法,它可能是不同的) – 2010-04-25 01:00:41
嘗試過了,它的作品好,感謝 – Kyle 2010-04-25 02:00:51
萬一有人有興趣,'?!'啓動負前瞻。我在這裏找到了一個很好的概覽:http://www.rexegg.com/regex-lookarounds.html – schnatterer 2014-08-18 20:11:05