@@ -431,8 +431,6 @@ private function walkGroupAst(
431
431
if (!$ inOptionalQuantification ) {
432
432
$ isNonEmpty = TrinaryLogic::createYes ();
433
433
}
434
- } elseif (!in_array ($ ast ->getValueToken (), ['capturing_name ' ], true )) {
435
- $ onlyLiterals = null ;
436
434
}
437
435
} elseif (!in_array ($ ast ->getId (), ['#capturing ' , '#namedcapturing ' ], true )) {
438
436
$ onlyLiterals = null ;
@@ -508,16 +506,26 @@ private function getLiteralValue(TreeNode $node, ?array &$onlyLiterals, bool $ap
508
506
$ token = $ node ->getValueToken ();
509
507
$ value = $ node ->getValueValue ();
510
508
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
+ ) {
512
518
if (str_contains ($ patternModifiers , 'x ' ) && trim ($ value ) === '' ) {
513
519
return null ;
514
520
}
515
521
516
522
if (strlen ($ value ) > 1 && $ value [0 ] === '\\' ) {
517
- return substr ($ value , 1 );
518
- } elseif (
523
+ $ value = substr ($ value , 1 ) ?: '' ;
524
+ }
525
+
526
+ if (
519
527
$ appendLiterals
520
- && $ token === 'literal '
528
+ && in_array ( $ token, [ 'literal ' , ' range ' , ' class_ ' , ' _class_literal ' ], true )
521
529
&& $ onlyLiterals !== null
522
530
&& !in_array ($ value , ['. ' ], true )
523
531
) {
@@ -533,14 +541,8 @@ private function getLiteralValue(TreeNode $node, ?array &$onlyLiterals, bool $ap
533
541
return $ value ;
534
542
}
535
543
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 ;
544
546
}
545
547
546
548
// character escape sequences, just return a fixed string
0 commit comments