@@ -129,16 +129,16 @@ function doUnknownFlags(string $s, int $flags): void {
129
129
130
130
function doMultipleAlternativeCaptureGroupsWithSameNameWithModifier (string $ s ): void {
131
131
if (preg_match ('/(?J)(?<Foo>[a-z]+)|(?<Foo>[0-9]+)/ ' , $ s , $ matches )) {
132
- assertType (' array{0: string, Foo: numeric-string| non-empty-string, 1: non-empty-string, 2? : numeric-string} ' , $ matches );
132
+ assertType (" array{0: string, Foo: non-empty-string, 1: non-empty-string}|array{0: string, Foo: numeric-string, 1: '', 2 : numeric-string} " , $ matches );
133
133
}
134
- assertType (' array{}|array{0: string, Foo: numeric-string| non-empty-string, 1: non-empty-string, 2? : numeric-string} ' , $ matches );
134
+ assertType (" array{}|array{0: string, Foo: non-empty-string, 1: non-empty-string}|array{0: string, Foo: numeric-string, 1: '', 2 : numeric-string} " , $ matches );
135
135
}
136
136
137
137
function doMultipleConsecutiveCaptureGroupsWithSameNameWithModifier (string $ s ): void {
138
138
if (preg_match ('/(?J)(?<Foo>[a-z]+)|(?<Foo>[0-9]+)/ ' , $ s , $ matches )) {
139
- assertType (' array{0: string, Foo: numeric-string| non-empty-string, 1: non-empty-string, 2? : numeric-string} ' , $ matches );
139
+ assertType (" array{0: string, Foo: non-empty-string, 1: non-empty-string}|array{0: string, Foo: numeric-string, 1: '', 2 : numeric-string} " , $ matches );
140
140
}
141
- assertType (' array{}|array{0: string, Foo: numeric-string| non-empty-string, 1: non-empty-string, 2? : numeric-string} ' , $ matches );
141
+ assertType (" array{}|array{0: string, Foo: non-empty-string, 1: non-empty-string}|array{0: string, Foo: numeric-string, 1: '', 2 : numeric-string} " , $ matches );
142
142
}
143
143
144
144
// https://github.com/hoaproject/Regex/issues/31
@@ -307,21 +307,21 @@ function (string $size): void {
307
307
if (preg_match ('~^(?:( \\d+)x( \\d+)|( \\d+)|x( \\d+))$~ ' , $ size , $ matches ) !== 1 ) {
308
308
throw new InvalidArgumentException (sprintf ('Invalid size "%s" ' , $ size ));
309
309
}
310
- assertType (' array{0: string, 1: numeric-string, 2: numeric-string, 3?: numeric-string, 4?: numeric-string} ' , $ matches );
310
+ assertType (" array{string, '', '', '', numeric-string}|array{string, '', '', numeric-string}|array{string, numeric-string, numeric-string} " , $ matches );
311
311
};
312
312
313
313
function (string $ size ): void {
314
314
if (preg_match ('~^(?:( \\d+)x( \\d+)|( \\d+)|x( \\d+))?$~ ' , $ size , $ matches ) !== 1 ) {
315
315
throw new InvalidArgumentException (sprintf ('Invalid size "%s" ' , $ size ));
316
316
}
317
- assertType (' array{0: string, 1: numeric-string, 2: numeric-string, 3?: numeric-string, 4?: numeric-string}|array{string} ' , $ matches );
317
+ assertType (" array{string, '', '', '', numeric-string}|array{string, '', '', numeric-string}|array{string, numeric-string, numeric-string}|array{string} " , $ matches );
318
318
};
319
319
320
320
function (string $ size ): void {
321
321
if (preg_match ('~\{(?:(include) \\s+(?:[$]? \\w+(?<!file)) \\s)|(?:(include \\s+file) \\s+(?:[$]? \\w+) \\s)|(?:(include(?:Template|(?: \\s+file))) \\s+(?: \'?.*?\.latte \'?) \\s)~ ' , $ size , $ matches ) !== 1 ) {
322
322
throw new InvalidArgumentException (sprintf ('Invalid size "%s" ' , $ size ));
323
323
}
324
- assertType ("array{0: string, 1: 'include ', 2?: non-falsy-string, 3?: non-falsy-string} " , $ matches );
324
+ assertType ("array{string, '', ' ', non-falsy-string}|array{string, '', non-falsy-string}|array{string, 'include' } " , $ matches );
325
325
};
326
326
327
327
@@ -338,13 +338,7 @@ function bug11277a(string $value): void
338
338
function bug11277b (string $ value ): void
339
339
{
340
340
if (preg_match ('/^(?:(.+,?)|(x))*$/ ' , $ value , $ matches )) {
341
- assertType ('array{0: string, 1?: non-empty-string, 2?: non-empty-string} ' , $ matches );
342
- if (count ($ matches ) === 2 ) {
343
- assertType ('array{string, string} ' , $ matches ); // could be array{string, non-empty-string}
344
- }
345
- if (count ($ matches ) === 3 ) {
346
- assertType ('array{string, string, string} ' , $ matches ); // could be array{string, non-empty-string, non-empty-string}
347
- }
341
+ assertType ("array{0: string, 1?: non-empty-string}|array{string, '', non-empty-string} " , $ matches );
348
342
}
349
343
}
350
344
@@ -656,10 +650,9 @@ function (string $value): void
656
650
}
657
651
};
658
652
659
- function (string $ value ): void
660
- {
653
+ function (string $ value ): void {
661
654
if (preg_match ('/^(?:(x)|(y))*$/ ' , $ value , $ matches , PREG_OFFSET_CAPTURE )) {
662
- assertType ("array{0: array{string, int<-1, max>}, 1?: array{non-empty-string, int<-1, max>}, 2?: array{non-empty-string, int<-1, max>}} " , $ matches );
655
+ assertType ("array{0: array{string, int<-1, max>}, 1?: array{non-empty-string, int<-1, max>}}|array{array{string, int<-1, max>}, array{'', int<-1, max>}, array{non-empty-string, int<-1, max>}} " , $ matches );
663
656
}
664
657
};
665
658
@@ -683,3 +676,26 @@ static public function sayHello(string $source): void
683
676
assertType ("array{0?: string, dateFrom?: ''|numeric-string, 1?: ''|numeric-string, dateTo?: numeric-string, 2?: numeric-string} " , $ matches );
684
677
}
685
678
}
679
+
680
+ function (string $ s ): void {
681
+ if (preg_match ('~a|(\d)|(\s)~ ' , $ s , $ matches ) === 1 ) {
682
+ assertType ("array{0: string, 1?: numeric-string}|array{string, '', non-empty-string} " , $ matches );
683
+ }
684
+ };
685
+
686
+ function (string $ s ): void {
687
+ if (preg_match ('~a|((u)x)|((v)y)~ ' , $ s , $ matches ) === 1 ) {
688
+ assertType ("array{string, '', '', 'vy', 'v'}|array{string, 'ux', 'u'}|array{string} " , $ matches );
689
+ }
690
+ };
691
+
692
+ function (string $ s ): void {
693
+ if (preg_match ('~a|(\d)|(\s)~ ' , $ s , $ matches , PREG_OFFSET_CAPTURE ) === 1 ) {
694
+ assertType ("array{0: array{string, int<-1, max>}, 1?: array{numeric-string, int<-1, max>}}|array{array{string, int<-1, max>}, array{'', int<-1, max>}, array{non-empty-string, int<-1, max>}} " , $ matches );
695
+ }
696
+ };
697
+
698
+ function (string $ s ): void {
699
+ preg_match ('~a|(\d)|(\s)~ ' , $ s , $ matches );
700
+ assertType ("array{0?: string, 1?: '', 2?: non-empty-string}|array{0?: string, 1?: numeric-string} " , $ matches );
701
+ };
0 commit comments