有人可以解释一下这个正则表达式应该如何工作:
^(a)|\1$
?
我将其解释为:
*1。字符串的开头,
其次是:
*2。任何一个:
*2a。一个a
,
或者:
*2b。先前匹配的(a)
组,
其次是:
*3。字符串结尾
但是,2b 是不可能的,因为(a)
如果选择 2b 而不是 2a,则没有先前匹配的组。因此,解释等价于:
*1。字符串的开头,
其次是:
*2。一个a
,
其次是:
*3。字符串结尾
换句话说,该正则表达式等价于:(^a$
也可以说 OR'ed 反向引用是无意义的。)
但是,在 Python 中,我得到:
>>> import re
>>> re.findall(r'^a$', r'aa')
[] # as expected
>>> re.findall(r'^(a)|\1$', r'a')
['a'] # as expected
>>> re.findall(r'^(a)|\1$', r'aa')
['a'] # NOT as expected
怎么aa
可能匹配^(a)|\1$
?