在(?<=abc)(?=xyz)
正则表达式只匹配的位置(地方字符串)是与abc
和xyz
.它会找到匹配abcxyz
但不会找到匹配,abcdefxyz
因为xyz
不会立即跟随abc
.
的(?=abc)(?=xyz)
,因为它在随后与应等于3个字母序列的字符串位置匹配模式将不会匹配任何东西abc
,并xyz
在同一时间,这是不可能的.
你在寻找什么
^(?=.*abc)(?=.*xyz)
或者,为了支持多行输入,添加DOTALL修饰符(?s)
(这样也.
可以匹配换行符):
(?s)^(?=.*abc)(?=.*xyz)
这些将匹配具有两个abc
和xyz
任何顺序的字符串.
见R演示:
a <- c("abcxyz", "abcdef", "defxyz", "abcdefxyz", "xyzdefabc") grep("^(?=.*abc)(?=.*xyz)", a, ignore.case=TRUE, perl=TRUE) ## => [1] 1 4 5