@@ -431,8 +431,6 @@ private function walkGroupAst(
431431 if (!$ inOptionalQuantification ) {
432432 $ isNonEmpty = TrinaryLogic::createYes ();
433433 }
434- } elseif (!in_array ($ ast ->getValueToken (), ['capturing_name ' ], true )) {
435- $ onlyLiterals = null ;
436434 }
437435 } elseif (!in_array ($ ast ->getId (), ['#capturing ' , '#namedcapturing ' ], true )) {
438436 $ onlyLiterals = null ;
@@ -508,16 +506,26 @@ private function getLiteralValue(TreeNode $node, ?array &$onlyLiterals, bool $ap
508506 $ token = $ node ->getValueToken ();
509507 $ value = $ node ->getValueValue ();
510508
511- if (in_array ($ token , ['literal ' , 'escaped_end_class ' ], true )) {
509+ if (
510+ in_array ($ token , [
511+ 'literal ' , 'escaped_end_class ' ,
512+ // literal "-" in front/back of a character class like '[-a-z]' or '[abc-]', not forming a range
513+ 'range ' ,
514+ // literal "[" or "]" inside character classes '[[]' or '[]]'
515+ 'class_ ' , '_class_literal ' ,
516+ ], true )
517+ ) {
512518 if (str_contains ($ patternModifiers , 'x ' ) && trim ($ value ) === '' ) {
513519 return null ;
514520 }
515521
516522 if (strlen ($ value ) > 1 && $ value [0 ] === '\\' ) {
517- return substr ($ value , 1 );
518- } elseif (
523+ $ value = substr ($ value , 1 ) ?: '' ;
524+ }
525+
526+ if (
519527 $ appendLiterals
520- && $ token === 'literal '
528+ && in_array ( $ token, [ 'literal ' , ' range ' , ' class_ ' , ' _class_literal ' ], true )
521529 && $ onlyLiterals !== null
522530 && !in_array ($ value , ['. ' ], true )
523531 ) {
@@ -533,14 +541,8 @@ private function getLiteralValue(TreeNode $node, ?array &$onlyLiterals, bool $ap
533541 return $ value ;
534542 }
535543
536- // literal "-" in front/back of a character class like '[-a-z]' or '[abc-]', not forming a range
537- if ($ token === 'range ' ) {
538- return $ value ;
539- }
540-
541- // literal "[" or "]" inside character classes '[[]' or '[]]'
542- if (in_array ($ token , ['class_ ' , '_class_literal ' ], true )) {
543- return $ value ;
544+ if (!in_array ($ token , ['capturing_name ' ], true )) {
545+ $ onlyLiterals = null ;
544546 }
545547
546548 // character escape sequences, just return a fixed string
0 commit comments