r - 用于匹配gnu r中的括号对的递归正则表达式
问题描述
我正在 R 和 stringr 包中试验递归正则表达式。不知何故,它给了我一个语法错误:U_REGEX_RULE_SYNTAX
正则表达式工作正常,只匹配匹配的括号:
https://regex101.com/r/Uv9Xy4/1
但在 R 中,它给了我所说的语法错误:
str_extract("((blub))(", "(?s)\\((?:[^()]+|(?R))*+\\)")
我错过了任何控制字符的转义吗?
解决方案
ICU 正则表达式库stringr
不能完成 PCRE 所能做的一切。ICU 正则表达式引擎不支持递归。
因此,将基数 R 与 一起使用perl=TRUE
:
x <- "((blub))("
regmatches(x, regexpr("\\((?:[^()]+|(?R))*+\\)", x, perl=TRUE))
## => [1] "((blub))"
请注意,(?s)
这里的 DOTALL 修饰符是多余的,因为.
模式中没有,可以安全地删除。
推荐阅读
- netty - 为什么netty 4.1找不到LongObjectHashMap和LongObjectMap
- html - r Google 新闻结果链接
- python - 当我设置freq="W"时,为什么输出变成freq="W-Sun"?
- python - 使用具有多个目标变量和多个搜索条件的 KDtree 在 sklearn 中查找 Kneighbors
- jsp - Dropzone 不适用于任何浏览器
- java - 任务不可序列化 - Java 1.8 和 Spark 2.1.1
- c# - 在 asp core 2.1 中上传后无法访问图像
- sql - 相关产品的 SQL Server 查询
- java - 如何打印新对象的参数?
- javascript - 创建具有动态内容的图像