首页 > 解决方案 > 用于匹配gnu r中的括号对的递归正则表达式

问题描述

我正在 R 和 stringr 包中试验递归正则表达式。不知何故,它给了我一个语法错误:U_REGEX_RULE_SYNTAX

正则表达式工作正常,只匹配匹配的括号:

https://regex101.com/r/Uv9Xy4/1

但在 R 中,它给了我所说的语法错误:

str_extract("((blub))(", "(?s)\\((?:[^()]+|(?R))*+\\)")

我错过了任何控制字符的转义吗?

标签: rregexstringr

解决方案


ICU 正则表达式库stringr不能完成 PCRE 所能做的一切。ICU 正则表达式引擎不支持递归。

因此,将基数 ​​R 与 一起使用perl=TRUE

x <- "((blub))("
regmatches(x, regexpr("\\((?:[^()]+|(?R))*+\\)", x, perl=TRUE))
## => [1] "((blub))"

请注意,(?s)这里的 DOTALL 修饰符是多余的,因为.模式中没有,可以安全地删除。


推荐阅读