regex 不能用正则表达式转义反斜杠吗?

iih3973s  于 2023-01-31  发布在  其他
关注(0)|答案(7)|浏览(139)

我使用下面的正则表达式

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

我知道它很难看,但到目前为止,它除了不允许反斜杠外,我认为它应该被转义,我还尝试了\\代替\\\,但结果相同,有什么想法吗?

up9lanfz

up9lanfz1#

如果你把它放在程序的字符串中,你可能实际上需要使用四个反斜杠(因为字符串解析器在对 * string * 进行"反转义"时会删除其中的两个,然后正则表达式需要两个反斜杠来转义正则表达式)。
例如:

regex("\\\\")

被解释为...

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

被解释为...

regex(\\)

被解释为匹配单个反斜杠的正则表达式。
根据语言的不同,你可以使用不同形式的引号,它不解析转义序列,以避免使用太多的转义序列。例如,在Python中:

re.compile(r'\\')

引号前面的r使它成为一个 * raw * 字符串,它不解析反斜杠转义。

xj3cbfub

xj3cbfub2#

如果它不是一个文本,你必须使用\\\\,这样你就得到了\\,它意味着一个转义的反斜杠。
这是因为有两种表示形式,在正则表达式的字符串表示形式中,有"\\\\",它被发送到解析器,解析器将看到\\,它被解释为一个有效的转义反斜杠(匹配一个反斜杠)。

hjzp0vay

hjzp0vay3#

反斜杠\是正则表达式的转义字符,因此双反斜杠实际上意味着单反斜杠。
\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.

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

os8fio9y

os8fio9y4#

http://www.regular-expressions.info/charclass.html开始:
请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(\),插入符号(^)和连字符(-)。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。要搜索星号或加号,使用[+*]。如果对字符类中的常规元字符进行转义,正则表达式将正常工作,但这样做会显著降低可读性。
要将反斜杠作为没有任何特殊含义的字符包含在字符类中,必须使用另一个反斜杠对其进行转义。[\x]匹配反斜杠或x。右括号(]),插入符号(^)和连字符(-)可以用反斜杠将其转义,或者将其放在不具有特殊含义的位置。我推荐后一种方法,因为它可以提高可读性。要包含插入符号,请将其放在左括号后面以外的任何位置。[x ^]匹配x或插入符号。您可以将右括号放在左括号后面,或否定插入符号。[] x]匹配右括号或x。[^] x]匹配任何不是右括号或x的字符。连字符可以包含在左括号之后、右括号之前或否定插入符号之后。[-x]和[x-]都与x或连字符匹配。
你用什么语言写正则表达式?

pwuypxnk

pwuypxnk5#

您可以在末尾使用?跳过一个“\”

regex("\\\\?")
lnlaulya

lnlaulya6#

此解决方案修复了我在将br标记替换为“\n”时遇到的问题。

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

tvmytwxo7#

在某些情况下,可以使用.代替\,并避免转义反斜杠

相关问题