Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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
使用stringi和gsub的不同输出(在同一字符串上使用相同的模式)_R_Gsub_Stringi - Fatal编程技术网

使用stringi和gsub的不同输出(在同一字符串上使用相同的模式)

使用stringi和gsub的不同输出(在同一字符串上使用相同的模式),r,gsub,stringi,R,Gsub,Stringi,我想知道为什么我使用gsub和stringi获得两个不同的输出字符串。元字符“.”是否在stringi中包含新行?我读的是“一行一行”吗 顺便说一下,我没有找到任何方法来执行stringi的“正确”替换,所以我需要在这里使用gsub string <- "is it normal?\n\nhttp://www.20minutes.fr" > gsub(" .*?http"," http", string) [1] "is http://www.20minutes.fr" >

我想知道为什么我使用gsub和stringi获得两个不同的输出字符串。元字符“.”是否在stringi中包含新行?我读的是“一行一行”吗

顺便说一下,我没有找到任何方法来执行stringi的“正确”替换,所以我需要在这里使用gsub

string <- "is it normal?\n\nhttp://www.20minutes.fr"

> gsub(" .*?http"," http", string)
[1] "is http://www.20minutes.fr"

> stri_replace_all_regex(string, " .*?http"," http")
[1] "is it normal?\n\nhttp://www.20minutes.fr"
stringgsub(“.*http”,“http”,string)
[1] ”“是吗http://www.20minutes.fr"
>stri_replace_all_正则表达式(字符串,“*?http”,“http”)
[1] “正常吗?\n\nhttp://www.20minutes.fr"

一种方法是将
设置为也匹配线路终止符,而不是停在线路上:

stri_replace_all_regex(string, " .*?http"," http", 
                       opts_regex = stri_opts_regex(dotall = TRUE))
默认情况下——出于历史原因,请参见——在大多数正则表达式引擎中,点与换行符不匹配。 正如@lukeA所建议的,要匹配换行符,可以在基于stringi正则表达式的函数中将
dotall
选项设置为
TRUE


顺便说一下,
gsub(…,perl=TRUE)
给出的结果与stringi一致

请尝试
stri\u replace\u all\u regex(字符串,“.*http”,“http”,opts\u regex=stri\u opts\u regex(dotall=TRUE))
@lukeA我想您可以将评论作为回复发布。顺便说一下,这也是:<代码> StryRePasePoLaReGEX(String,“(s))*(http),“http”)< /> >我认为这种行为很奇怪!你知道他们为什么改变标准的R(posix)正则表达式行为吗?在Perl中,点是否与新行不匹配?