用正则表达式无法逃避反斜杠?

时间:2010-10-26 15:56:48

标签: regex

我正在使用以下正则表达式

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

我知道它很难看,但到目前为止,除了不允许使用反斜杠之外,它还有其他目的,因为它已被转义,我也尝试了\\而不是\\\但结果相同。有什么想法吗?

6 个答案:

答案 0 :(得分:192)

如果你把它放在一个程序中的字符串中,你实际上可能需要使用四个反斜杠(因为当为字符串“解除”它时,字符串解析器将删除其中的两个,然后正则表达式需要两个用于转义的正则表达式反斜杠。)

例如:

regex("\\\\")

被解释为......

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

被解释为......

regex(\\)

被解释为匹配单个反斜杠的正则表达式。


根据语言的不同,您可以使用不解析转义序列的不同形式的引用,以避免必须使用尽可能多的引用 - 例如,在Python中:

re.compile(r'\\')

引号前面的r使其成为 raw 字符串,不会解析反斜杠转义。

答案 1 :(得分:13)

如果它不是文字,则必须使用\\\\,以便获得\\,这意味着转义为反斜杠。

那是因为有两种表示形式。在正则表达式的字符串表示中,您有"\\\\",这是发送给解析器的内容。解析器将看到\\,它将其解释为有效的转义反斜杠(与单个反斜杠匹配)。

答案 2 :(得分:8)

反斜杠\是正则表达式的转义字符。因此,双反斜杠确实意味着单个字面反斜杠。

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

参考:http://www.regular-expressions.info/reference.html

答案 3 :(得分:3)

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

  

请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(\\),插入符号(^)和连字符( - )。通常的元字符是字符类中的普通字符,不需要通过反斜杠进行转义。要搜索星号或加号,请使用[+ *]。如果你逃避字符类中的常规元字符,你的正则表达式将正常工作,但这样做会大大降低可读性。

     

要在字符类中包含反斜杠作为字符而没有任何特殊含义,您必须使用另一个反斜杠转义它。 [\\ x]匹配反斜杠或x。闭括号(]),插入符号(^)和连字符( - )可以通过用反斜杠转义它们,或者将它们置于不具有其特殊含义的位置来包含。我推荐后一种方法,因为它提高了可读性。要包括插入符号,请将其放在开口括号后面的任何位置。 [x ^]匹配x或插入符号。您可以将右侧支架放在开口支架后面,或者使用否定插入符号。 [] x]匹配右括号或x。 [^] x]匹配任何不是右括号或x的字符。连字符可以在开始括号之后,或在右括号之前,或在否定插入符之后。 [-x]和[x-]都匹配x或连字符。

你用什么语言编写正则表达式?

答案 4 :(得分:1)

可以使用吗?最后跳过一个“ \”

regex("\\\\?")

答案 5 :(得分:0)

此解决方案修复了我的问题,同时将br标签替换为'\ n'。

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