Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用括号时正则表达式不一致_R_Regex - Fatal编程技术网

R 使用括号时正则表达式不一致

R 使用括号时正则表达式不一致,r,regex,R,Regex,有谁能帮助我理解为什么会出现以下情况: require(stringr) x = "The quick brown fox jumps over the lazy dog" str_detect(x, 'dog') #> [1] TRUE str_detect(x, '(?=dog)') #> [1] TRUE str_detect(x, '(?=quick)(?=dog)') # fails why? #> [1] FALSE str_detect(x, '(?=quick)

有谁能帮助我理解为什么会出现以下情况:

require(stringr)
x = "The quick brown fox jumps over the lazy dog"
str_detect(x, 'dog')
#> [1] TRUE
str_detect(x, '(?=dog)')
#> [1] TRUE
str_detect(x, '(?=quick)(?=dog)') # fails why?
#> [1] FALSE
str_detect(x, '(?=quick)(?=.*dog)')
#> [1] TRUE
从前面看,向前看,向后看:

是零长度断言;它们不使用中的字符 字符串,但仅断言匹配是否可能

因此正则表达式
(?=quick)(?=dog)
将首先与
(?=quick)
匹配:

由于它不使用字符,所以在匹配后,位置保持在quick之前,并继续匹配下一个模式
(?=dog)
,该模式失败,因为这不是真的,实际上,您将永远找不到紧跟着
quick
dog
的位置

如果其中一个模式是另一个模式的前缀,例如
quick
qui
,您会发现这是有效的:

x = "The quick brown fox jumps over the lazy dog"
str_detect(x, '(?=quick)(?=qui)')
# [1] TRUE

(?=quick)(?=.*dog)
另一方面,尝试在匹配后的位置查找
(?=.*dog)

它断言
TRUE
,因为
quick brown fox跳过了懒狗
,可以匹配
*狗

,向前看和向后看:

是零长度断言;它们不使用中的字符 字符串,但仅断言匹配是否可能

因此正则表达式
(?=quick)(?=dog)
将首先与
(?=quick)
匹配:

由于它不使用字符,所以在匹配后,位置保持在quick之前,并继续匹配下一个模式
(?=dog)
,该模式失败,因为这不是真的,实际上,您将永远找不到紧跟着
quick
dog
的位置

如果其中一个模式是另一个模式的前缀,例如
quick
qui
,您会发现这是有效的:

x = "The quick brown fox jumps over the lazy dog"
str_detect(x, '(?=quick)(?=qui)')
# [1] TRUE

(?=quick)(?=.*dog)
另一方面,尝试在匹配后的位置查找
(?=.*dog)


它断言
TRUE
,因为
quick brown fox跳过了懒狗
可以匹配
*dog

Lookaheads,比如
(?=quick)
在lookahead中的内容之前匹配。
(?=quick)
匹配的点后面不紧跟着
狗。你想让你的正则表达式是什么意思?你想在逻辑上断言
dog
出现在
quick
'(?=quick)(?=quick.*dog)
=
(?=quick.*dog)
lookahead类似于
(?=quick)
的内容前面匹配。
(?=quick)
匹配的点后面不紧跟着
狗。你想要你的正则表达式是什么意思?你的第四个正则表达式是你想要逻辑地断言
dog
出现在
quick
'(?=quick)(?=.*dog)
=
=
'(?=quick.*dog)
。我正在努力实现一个和声明,所以这是有效的。谢谢你。我正在尝试实现一个AND语句,这样它就可以工作了。
The quick brown fox jumps over the lazy dog
   ^^  # this position