欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

正则表达式中的/\\\\/四个反斜杠含义 标准的应该是 4 个,只是写三个好像现在的新解释器输出结果是一样的。 有大用

正则表达式中的/\\\\/四个反斜杠含义

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zttaiwx/article/details/53981755
<?php

echo '\\';

运行结果:\ 
由此可见,在字符串中,两个反斜杠被解释为一个反斜杠,然后在作为正则表达式, \\ 则被正则表达式引擎解释为 \,所以在正则表达式中需要使用四个反斜杠。 好像用三个也可以
也就是说,前两个反斜杠在字符串中被解释为一个反斜杠,后两个也被解释为一个反斜杠,这时解释完毕后变成两个反斜杠,再由正则表达式解释两个反斜杠,就又解释成了一个反斜杠,所以,在正则表达式中要匹配一个反斜杠时,需要四个反斜杠。

同理,要匹配点号时,需要在点号之前加上两个反斜杠,否则将被正则表达式当作一个点号,一个点号在正则表达式中表示匹配任意字符了。

来自  https://blog.csdn.net/zttaiwx/article/details/53981755



re.sub() 过滤反斜杠 \ 为什么要打三个反斜杠 \\\ 才行呢?


  

   rogwan · 2017-09-22 13:36:00 +08:00 · 2083 次点击
这是一个创建于 426 天前的主题,其中的信息可能已经有所发展或是发生改变。

一个字符串 string_a 中可能有反斜杠 \ 这个字符,用 re.sub()过滤掉它,为什么要打三个反斜杠 \\\ 才行呢? 这个 \ 到底谁在转义谁呀

re.sub('[\\\]', 'repl', string_a)
9 回复  |  直到 2017-09-22 14:56:50 +08:00

    1
noe132   2017-09-22 13:47:29 +08:00 via Android
我想到了 JavaScript 的正则构造函数,如果要匹配 /得打 4 个
new RegExp('////')

    2
noe132   2017-09-22 13:47:50 +08:00 via Android
斜杠打反了。。。

    3
charove   2017-09-22 13:48:43 +08:00
bash [[]]也很反人类啊。

    4
rogerchen   2017-09-22 14:13:14 +08:00
善用 raw string,'[\\\]' --> r'\\',话说我很难理解为什么要用 '[]' 去把 \ 装起来

    5
rogwan   2017-09-22 14:35:14 +08:00
@noe132 试了三个没问题,查了下,发现四个才是标准写法

@rogerchen 因为除了反斜杠,还有其他的符号要一起,问题里省略了

    6
hahastudio   2017-09-22 14:39:05 +08:00   ♥ 2
你确定不应该是 '[\\\\]' 么
'[\\\]' 对应了 4 个字符,[ 是 [,\\ 是 \,\] 是 \]
因为 python 在 escape 的时候,\ 后面接的字符不是有效的需转义的字符的话,\ 会被正常返回,所以

>>> print '\]'
\]
>>> '[\\\]' == '[\\\\]'
True
>>> print '[\\\\]'
[\\]

至于为什么要两个 \,因为在 regex 里,想要表达字面 \ 需要转义

    7
rogwan   2017-09-22 14:43:16 +08:00
@hahastudio 我上面的回复里修正了,标准的应该是 4 个,只是写三个好像现在的新解释器输出结果是一样的。

    8
Cooky   2017-09-22 14:47:24 +08:00 via Android
尽量用 raw string,不然自己看都费尽

    9
Osk   2017-09-22 14:56:50 +08:00 via Android
为什么不用 raw string...

来自  https://www.v2ex.com/t/392815#r_4780679

普通分类: