Lines Matching full:pattern
102 $pattern = trim($rawPattern);
103 if ($pattern === '') {
107 // Validate and secure the regex pattern
108 $validationResult = $this->validateRegexPattern($pattern, $lineNumber + 1);
119 if ($this->matchesPattern($pattern, $matchTarget)) {
185 * Validate a regex pattern for security and correctness
188 * pattern is syntactically correct. Returns detailed error messages.
191 * @param string $pattern The regex pattern to validate
195 public function validateRegexPattern($pattern, $lineNumber = 0) { argument
199 if (trim($pattern) === '') {
200 return $linePrefix . 'Empty pattern is not allowed';
206 if (preg_match('/\([^)]*[\+\*][^)]*\)[\+\*]/', $pattern) ||
207 preg_match('/\(.+[\+\*]\)[\+\*]/', $pattern)) {
208 return $linePrefix . sprintf($this->getLang('pattern_redos_warning'), $pattern);
211 // Limit pattern length to prevent extremely complex patterns
212 if (strlen($pattern) > 1000) {
213 return $linePrefix . sprintf($this->getLang('pattern_too_long'), $pattern);
216 // Test if the pattern is syntactically valid
217 $escapedPattern = '/' . str_replace('/', '\/', $pattern) . '/u';
222 … return $linePrefix . sprintf($this->getLang('pattern_invalid_syntax'), $pattern, $errorMsg);
229 * Check if a pattern matches a target string
231 * Applies the regex pattern with error handling and basic timeout protection
235 * @param string $pattern The validated regex pattern
237 * @return bool True if the pattern matches, false otherwise
239 public function matchesPattern($pattern, $target) { argument
240 // Escape forward slashes in pattern to use with / delimiters
241 $escapedPattern = '/' . str_replace('/', '\/', $pattern) . '/u';