我正在使用以下正则表达式
^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$
我知道它很丑陋,但是到目前为止,它已经达到了它的目的,而不是因为反斜杠被忽略了,所以我认为应该这样做,\\
而不是不允许这样做\\\
。有任何想法吗?
我正在使用以下正则表达式
^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$
我知道它很丑陋,但是到目前为止,它已经达到了它的目的,而不是因为反斜杠被忽略了,所以我认为应该这样做,\\
而不是不允许这样做\\\
。有任何想法吗?
Answers:
如果你把这个字符串中的一个程序中,你实际上可能需要使用四个反斜杠(因为字符串解析器会删除他们两个当“去转义”它的字符串,然后将正则表达式需要两个为转义的正则表达式反斜杠)。
例如:
regex("\\\\")
被解释为...
regex("\\" [escaped backslash] followed by "\\" [escaped backslash])
被解释为...
regex(\\)
被解释为与单个反斜杠匹配的正则表达式。
根据语言的不同,您可能可以使用不解析转义序列的另一种形式的引用,以避免使用过多的引号,例如在Python中:
re.compile(r'\\')
在r
前面的行情中使得它的原始的字符串,不分析反斜杠。
new RegExp('\\\\\\d');
。
如果不是字面量,则必须使用,\\\\
这样就可以得到\\
转义的反斜杠。
那是因为有两种表示形式。在正则表达式的字符串表示中,您具有"\\\\"
,这是发送到解析器的内容。解析器将看到\\
将其解释为有效的转义反斜杠(与单个反斜杠匹配)。
反斜杠\
是正则表达式的转义字符。因此,双反斜杠确实意味着一个单字面反斜杠。
\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.
从http://www.regular-expressions.info/charclass.html:
请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(\\),脱字符号(^)和连字符(-)。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。要搜索星号或加号,请使用[+ *]。如果您转义字符类中的常规元字符,则您的正则表达式可以正常工作,但这样做会大大降低可读性。
要将反斜杠作为字符包含在内,而在字符类中没有任何特殊含义,则必须使用另一个反斜杠对其进行转义。[\\ x]匹配反斜杠或x。可以通过用反斜杠转义转义符(^)和连字符(^)或将它们放在不具有特殊含义的位置来包括它们。我建议使用后一种方法,因为它可以提高可读性。要包括插入标记,请将其放置在左括号旁边的任何位置。[x ^]匹配x或插入符号。您可以将右括号放在开括号或负号插入符之后。[] x]与右括号或x匹配。[^] x]匹配不是右括号或x的任何字符。连字符可以在右括号之后,右括号之前或负号插入符之后。
您用什么语言编写正则表达式?