@@ -129,16 +129,16 @@ function doUnknownFlags(string $s, int $flags): void {
129129
130130function doMultipleAlternativeCaptureGroupsWithSameNameWithModifier (string $ s ): void {
131131 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 );
133133 }
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 );
135135}
136136
137137function doMultipleConsecutiveCaptureGroupsWithSameNameWithModifier (string $ s ): void {
138138 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 );
140140 }
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 );
142142}
143143
144144// https://github.com/hoaproject/Regex/issues/31
@@ -307,21 +307,21 @@ function (string $size): void {
307307 if (preg_match ('~^(?:( \\d+)x( \\d+)|( \\d+)|x( \\d+))$~ ' , $ size , $ matches ) !== 1 ) {
308308 throw new InvalidArgumentException (sprintf ('Invalid size "%s" ' , $ size ));
309309 }
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 );
311311};
312312
313313function (string $ size ): void {
314314 if (preg_match ('~^(?:( \\d+)x( \\d+)|( \\d+)|x( \\d+))?$~ ' , $ size , $ matches ) !== 1 ) {
315315 throw new InvalidArgumentException (sprintf ('Invalid size "%s" ' , $ size ));
316316 }
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 );
318318};
319319
320320function (string $ size ): void {
321321 if (preg_match ('~\{(?:(include) \\s+(?:[$]? \\w+(?<!file)) \\s)|(?:(include \\s+file) \\s+(?:[$]? \\w+) \\s)|(?:(include(?:Template|(?: \\s+file))) \\s+(?: \'?.*?\.latte \'?) \\s)~ ' , $ size , $ matches ) !== 1 ) {
322322 throw new InvalidArgumentException (sprintf ('Invalid size "%s" ' , $ size ));
323323 }
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 );
325325};
326326
327327
@@ -338,13 +338,7 @@ function bug11277a(string $value): void
338338function bug11277b (string $ value ): void
339339{
340340 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 );
348342 }
349343}
350344
@@ -656,10 +650,9 @@ function (string $value): void
656650 }
657651};
658652
659- function (string $ value ): void
660- {
653+ function (string $ value ): void {
661654 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 );
663656 }
664657};
665658
@@ -683,3 +676,26 @@ static public function sayHello(string $source): void
683676 assertType ("array{0?: string, dateFrom?: ''|numeric-string, 1?: ''|numeric-string, dateTo?: numeric-string, 2?: numeric-string} " , $ matches );
684677 }
685678}
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