2010-10-26 125 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')); 
相关问题