递归正则表达式,用于匹配gnu r中的括号对

时间:2019-06-14 11:11:34

标签: r regex stringr

我正在使用R和stringr包中的递归正则表达式进行实验。它以某种方式给了我一个语法错误:U_REGEX_RULE_SYNTAX

正则表达式正常工作,并且仅匹配匹配的括号:

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

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

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

我想念任何控制字符吗?

1 个答案:

答案 0 :(得分:0)

{p {1}}中使用的

ICU正则表达式库无法完成PCRE能够做的所有事情。 ICU正则表达式引擎不支持递归。

因此,将基数R与stringr一起使用:

perl=TRUE

请注意,x <- "((blub))(" regmatches(x, regexpr("\\((?:[^()]+|(?R))*+\\)", x, perl=TRUE)) ## => [1] "((blub))" DOTALL修饰符在这里是多余的,因为模式中没有(?s),可以安全地删除它。