@@ -72,30 +72,48 @@ public function resolve(Expr $expr): Type
72
72
73
73
public function getPatternModifiers (string $ pattern ): ?string
74
74
{
75
- $ delimiter = $ this ->getDelimiterFromString (new ConstantStringType ($ pattern ));
76
- if ($ delimiter === null ) {
75
+ $ endDelimiterPos = $ this ->getEndDelimiterPos ($ pattern );
76
+
77
+ if ($ endDelimiterPos === false ) {
77
78
return null ;
78
79
}
79
80
81
+ return substr ($ pattern , $ endDelimiterPos + 1 );
82
+ }
83
+
84
+ public function removeDelimitersAndModifiers (string $ pattern ): string
85
+ {
86
+ $ endDelimiterPos = $ this ->getEndDelimiterPos ($ pattern );
87
+
88
+ if ($ endDelimiterPos === false ) {
89
+ return $ pattern ;
90
+ }
91
+
92
+ return substr ($ pattern , 1 , $ endDelimiterPos - 1 );
93
+ }
94
+
95
+ private function getEndDelimiterPos (string $ pattern ): false |int
96
+ {
97
+ $ startDelimiter = $ this ->getPatternDelimiter ($ pattern );
98
+ if ($ startDelimiter === null ) {
99
+ return false ;
100
+ }
101
+
80
102
// delimiter variants, see https://www.php.net/manual/en/regexp.reference.delimiters.php
81
103
$ bracketStyleDelimiters = [
82
104
'{ ' => '} ' ,
83
105
'( ' => ') ' ,
84
106
'[ ' => '] ' ,
85
107
'< ' => '> ' ,
86
108
];
87
- if (array_key_exists ($ delimiter , $ bracketStyleDelimiters )) {
88
- $ endDelimiterPos = strrpos ($ pattern , $ bracketStyleDelimiters [$ delimiter ]);
109
+ if (array_key_exists ($ startDelimiter , $ bracketStyleDelimiters )) {
110
+ $ endDelimiterPos = strrpos ($ pattern , $ bracketStyleDelimiters [$ startDelimiter ]);
89
111
} else {
90
112
// same start and end delimiter
91
- $ endDelimiterPos = strrpos ($ pattern , $ delimiter );
113
+ $ endDelimiterPos = strrpos ($ pattern , $ startDelimiter );
92
114
}
93
115
94
- if ($ endDelimiterPos === false ) {
95
- return null ;
96
- }
97
-
98
- return substr ($ pattern , $ endDelimiterPos + 1 );
116
+ return $ endDelimiterPos ;
99
117
}
100
118
101
119
/**
@@ -113,7 +131,7 @@ public function getPatternDelimiters(Concat $concat, Scope $scope): array
113
131
114
132
$ delimiters = [];
115
133
foreach ($ left ->getConstantStrings () as $ leftString ) {
116
- $ delimiter = $ this ->getDelimiterFromString ($ leftString );
134
+ $ delimiter = $ this ->getPatternDelimiter ($ leftString-> getValue () );
117
135
if ($ delimiter === null ) {
118
136
continue ;
119
137
}
@@ -123,13 +141,13 @@ public function getPatternDelimiters(Concat $concat, Scope $scope): array
123
141
return $ delimiters ;
124
142
}
125
143
126
- private function getDelimiterFromString ( ConstantStringType $ string ): ?string
144
+ private function getPatternDelimiter ( string $ regex ): ?string
127
145
{
128
- if ($ string -> getValue () === '' ) {
146
+ if ($ regex === '' ) {
129
147
return null ;
130
148
}
131
149
132
- return substr ($ string -> getValue () , 0 , 1 );
150
+ return substr ($ regex , 0 , 1 );
133
151
}
134
152
135
153
}
0 commit comments