排除运算符^如何与先前捕获的值一起使用?
注意下面正则表达式中的[^ \ 1]:
"abcdefgabcdefga".scan(/(\w)([^\1]+)(\1)/)
[
[0] [
[0] "a",
[1] "bcdefgabcdefg",
[2] "a"
]
]
注意下面正则表达式中的[^ a]:
"abcdefgabcdefga".scan(/(\w)([^a]+)(\1)/)
[
[0] [
[0] "a",
[1] "bcdefg",
[2] "a"
]
]
似乎\ 1和硬编码'a'是两个不同的东西?
我正在使用ruby 2.1.1p76
答案 0 :(得分:1)
没有\1
确实代表对a
的反向引用,但[^\1]
这里的问题与[^a]
不同,因为\1
的特殊含义得到了失去了角色类。
正确的做法是使用这样的负面预测:
(\w)(?:(?!\1).)+(\1)
答案 1 :(得分:0)
正如在其他答案中已经说过的那样\ 1在方括号内时不是后向引用。 建议的解决方案是可行的,但只是抛弃另一个使用非贪婪匹配的替代方案:
/(\w)(.+?)(\1)/
一旦找到后面的参考,它就会停止。