diff --git a/Sources/_MatchingEngine/Regex/Parse/LexicalAnalysis.swift b/Sources/_MatchingEngine/Regex/Parse/LexicalAnalysis.swift index e917b6a8a..99e97727e 100644 --- a/Sources/_MatchingEngine/Regex/Parse/LexicalAnalysis.swift +++ b/Sources/_MatchingEngine/Regex/Parse/LexicalAnalysis.swift @@ -1136,7 +1136,7 @@ extension Source { } // References that look like groups, e.g (?R), (?1), ... - if let ref = try src.lexGroupLikeReference() { + if !customCC, let ref = try src.lexGroupLikeReference() { return ref.value } diff --git a/Tests/RegexTests/ParseTests.swift b/Tests/RegexTests/ParseTests.swift index ddb8dcbad..6dd38d28d 100644 --- a/Tests/RegexTests/ParseTests.swift +++ b/Tests/RegexTests/ParseTests.swift @@ -831,6 +831,10 @@ extension RegexTests { parseTest(#"(?P>+1)"#, subpattern(.named("+1"))) parseTest(#"(?P=+1)"#, backreference(.named("+1"))) + parseTest(#"[(?R)]"#, charClass("(", "?", "R", ")")) + parseTest(#"[(?&a)]"#, charClass("(", "?", "&", "a", ")")) + parseTest(#"[(?1)]"#, charClass("(", "?", "1", ")")) + parseTest(#"\g<1>"#, subpattern(.absolute(1))) parseTest(#"\g<001>"#, subpattern(.absolute(1))) parseTest(#"\g'52'"#, subpattern(.absolute(52)))