2010-10-26 128 views
82

我使用下面的正則表達式不能使用正則表達式逃避反斜槓?

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$ 

我知道這是醜陋的,但到目前爲止,它提供比沒有被允許,因爲我認爲它應該因爲它躲過了反斜線其他的目的,我也試過\\代替\\\但結果相同。有任何想法嗎?

+2

什麼語言?它是否被引用? – 2010-10-26 15:59:21

+2

我只是修正了標題中的拼寫錯誤,但是關於標題「無法用正則表達式逃避反彈?確實! – 2010-10-26 16:04:52

+1

@AdamCrossland難道我們都希望正則表達式可以幫助我們擺脫反彈? > _> – 2010-10-26 16:16:10

回答

156

如果你把這個字符串中的一個程序中,你實際上可能需要使用四個反斜槓(因爲字符串解析器會刪除他們兩個當「去轉義」它爲,然後正則表達式需要兩個用於逃逸正則表達式反斜槓)。

例如:

regex("\\\\") 

被解釋爲......

regex("\\" [escaped backslash] followed by "\\" [escaped backslash]) 

被解釋爲......

regex(\\) 

被解釋爲匹配一個反斜槓正則表達式。


根據不同的語言,你也許可以使用不同的形式引用不分析轉義序列,以避免使用盡可能多的 - 例如,在Python:

re.compile(r'\\') 

前面的r使其成爲原始不解析反斜槓轉義的字符串。

+7

嘿嘿......我剛剛遇到了這個,需要添加三個。我只是不斷添加反斜槓,直到它工作。 – billynoah 2015-04-27 15:01:42

+0

嗯,爲什麼地球上這個正則表達式重新解釋了兩次,而不是像它應該用於PCRE? – 2016-09-04 02:26:18

+0

是的......需要4個反斜槓!! ??? – Andrew 2016-12-06 20:21:26

8

如果不是字面意思,則必須使用\\\\,以便獲得\\這意味着轉義反斜槓。

這是因爲有兩種表示。在你的正則表達式的字符串表示中,你有"\\\\",這是發送到解析器的東西。解析器將看到它被解釋爲有效的反斜槓(匹配單個反斜槓)的\\

7

反斜槓\是正則表達式的轉義字符。因此,雙反斜槓確實意味着單個反斜槓。

\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.

REF:http://www.regular-expressions.info/reference.html

3

http://www.regular-expressions.info/charclass.html

注意,在字符類的內部的唯一特殊字符或元字符是右括號([),反斜槓( \\),脫字號(^)和連字符( - )。通常的元字符是字符類中的普通字符,不需要用反斜線進行轉義。要搜索星號或加號,請使用[+ *]。如果您逃避字符類中的常規元字符,那麼您的正則表達式將正常工作,但這樣會顯着降低可讀性。

要在字符類中包含一個沒有任何特殊含義的字符作爲反斜槓,必須用另一個反斜槓進行轉義。 [\\ x]匹配反斜線或x。括號(]),插入符號(^)和連字符( - )可以通過用反斜槓轉義,或者將它們放在不具有其特殊含義的位置來包含。我推薦後一種方法,因爲它提高了可讀性。要包括一個插入符號,請將其放置在除開啓支架之後的任何地方。 [x ^]匹配一個x或一個插入符號。你可以把右括號放在開頭的括號之後,或者是否定的脫字號。 [] x]匹配右括號或x。 [^] x]匹配任何不是右括號或x的字符。連字符可以包含在右括號之後,也可以在右括號之前,或者在否定詞之後。 [-x]和[x-]都匹配x或連字符。

你在寫什麼語言的正則表達式?

0

此解決方案解決了我的問題,同時將br標記替換爲'\ n'。

alert(content.replace(/<br\/\>/g,'\n')); 
相關問題