我使用下面的正则表达式
^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$
我知道它很难看,但到目前为止,它除了不允许反斜杠外,我认为它应该被转义,我还尝试了\\代替\\\,但结果相同,有什么想法吗?
\\
\\\
up9lanfz1#
如果你把它放在程序的字符串中,你可能实际上需要使用四个反斜杠(因为字符串解析器在对 * string * 进行"反转义"时会删除其中的两个,然后正则表达式需要两个反斜杠来转义正则表达式)。例如:
regex("\\\\")
被解释为...
regex("\\" [escaped backslash] followed by "\\" [escaped backslash])
regex(\\)
被解释为匹配单个反斜杠的正则表达式。根据语言的不同,你可以使用不同形式的引号,它不解析转义序列,以避免使用太多的转义序列。例如,在Python中:
re.compile(r'\\')
引号前面的r使它成为一个 * raw * 字符串,它不解析反斜杠转义。
r
xj3cbfub2#
如果它不是一个文本,你必须使用\\\\,这样你就得到了\\,它意味着一个转义的反斜杠。这是因为有两种表示形式,在正则表达式的字符串表示形式中,有"\\\\",它被发送到解析器,解析器将看到\\,它被解释为一个有效的转义反斜杠(匹配一个反斜杠)。
\\\\
"\\\\"
hjzp0vay3#
反斜杠\是正则表达式的转义字符,因此双反斜杠实际上意味着单反斜杠。\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.
\
\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.
参考:http://www.regular-expressions.info/reference.html
os8fio9y4#
从http://www.regular-expressions.info/charclass.html开始:请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(\),插入符号(^)和连字符(-)。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。要搜索星号或加号,使用[+*]。如果对字符类中的常规元字符进行转义,正则表达式将正常工作,但这样做会显著降低可读性。要将反斜杠作为没有任何特殊含义的字符包含在字符类中,必须使用另一个反斜杠对其进行转义。[\x]匹配反斜杠或x。右括号(]),插入符号(^)和连字符(-)可以用反斜杠将其转义,或者将其放在不具有特殊含义的位置。我推荐后一种方法,因为它可以提高可读性。要包含插入符号,请将其放在左括号后面以外的任何位置。[x ^]匹配x或插入符号。您可以将右括号放在左括号后面,或否定插入符号。[] x]匹配右括号或x。[^] x]匹配任何不是右括号或x的字符。连字符可以包含在左括号之后、右括号之前或否定插入符号之后。[-x]和[x-]都与x或连字符匹配。你用什么语言写正则表达式?
pwuypxnk5#
您可以在末尾使用?跳过一个“\”
regex("\\\\?")
lnlaulya6#
此解决方案修复了我在将br标记替换为“\n”时遇到的问题。
alert(content.replace(/<br\/\>/g,'\n'));
tvmytwxo7#
在某些情况下,可以使用.代替\,并避免转义反斜杠
.
7条答案
按热度按时间up9lanfz1#
如果你把它放在程序的字符串中,你可能实际上需要使用四个反斜杠(因为字符串解析器在对 * string * 进行"反转义"时会删除其中的两个,然后正则表达式需要两个反斜杠来转义正则表达式)。
例如:
被解释为...
被解释为...
被解释为匹配单个反斜杠的正则表达式。
根据语言的不同,你可以使用不同形式的引号,它不解析转义序列,以避免使用太多的转义序列。例如,在Python中:
引号前面的
r
使它成为一个 * raw * 字符串,它不解析反斜杠转义。xj3cbfub2#
如果它不是一个文本,你必须使用
\\\\
,这样你就得到了\\
,它意味着一个转义的反斜杠。这是因为有两种表示形式,在正则表达式的字符串表示形式中,有
"\\\\"
,它被发送到解析器,解析器将看到\\
,它被解释为一个有效的转义反斜杠(匹配一个反斜杠)。hjzp0vay3#
反斜杠
\
是正则表达式的转义字符,因此双反斜杠实际上意味着单反斜杠。\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.
参考:http://www.regular-expressions.info/reference.html
os8fio9y4#
从http://www.regular-expressions.info/charclass.html开始:
请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(\),插入符号(^)和连字符(-)。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。要搜索星号或加号,使用[+*]。如果对字符类中的常规元字符进行转义,正则表达式将正常工作,但这样做会显著降低可读性。
要将反斜杠作为没有任何特殊含义的字符包含在字符类中,必须使用另一个反斜杠对其进行转义。[\x]匹配反斜杠或x。右括号(]),插入符号(^)和连字符(-)可以用反斜杠将其转义,或者将其放在不具有特殊含义的位置。我推荐后一种方法,因为它可以提高可读性。要包含插入符号,请将其放在左括号后面以外的任何位置。[x ^]匹配x或插入符号。您可以将右括号放在左括号后面,或否定插入符号。[] x]匹配右括号或x。[^] x]匹配任何不是右括号或x的字符。连字符可以包含在左括号之后、右括号之前或否定插入符号之后。[-x]和[x-]都与x或连字符匹配。
你用什么语言写正则表达式?
pwuypxnk5#
您可以在末尾使用?跳过一个“\”
lnlaulya6#
此解决方案修复了我在将br标记替换为“\n”时遇到的问题。
tvmytwxo7#
在某些情况下,可以使用
.
代替\
,并避免转义反斜杠