修复R语言URL验证正则表达式:解决以s开头域名识别失败问题
问题分析与解决方案
问题根源
原正则表达式中的\s在R的双引号字符串中未正确转义:R字符串里的反斜杠需要用双反斜杠\\转义,否则\s会被解析为普通字符s,导致[^\s/$.?#]等价于[^s/$.?#]——这个字符类明确排除了s,所以域名以s开头的URL自然匹配失败。
修改后的验证函数
将正则里的\s替换为\\s,修正后的代码如下:
is_valid_url <- function(string) { any(grepl("(https?|ftp)://[^\\s/$.?#].[^\\s]*", string)) }
测试验证
运行修改后的正则测试原问题案例,结果如下:
> any(grepl("(https?|ftp)://[^\\s/$.?#].[^\\s]*", "https://science.org")) [1] TRUE > any(grepl("(https?|ftp)://[^\\s/$.?#].[^\\s]*", "https://stackoverflow.com")) [1] TRUE > any(grepl("(https?|ftp)://[^\\s/$.?#].[^\\s]*", "http://example.com")) [1] TRUE > any(grepl("(https?|ftp)://[^\\s/$.?#].[^\\s]*", "www.example.com")) [1] FALSE > any(grepl("(https?|ftp)://[^\\s/$.?#].[^\\s]*", "123")) [1] FALSE
所有案例均符合预期,域名以s开头的URL现在能正确返回TRUE。
内容的提问来源于stack exchange,提问作者klidvdo
相关产品推荐
相关产品推荐

