@@ -14,7 +14,7 @@ def get_pos(match):
1414
1515
1616# Cache compiled regex patterns
17- @lru_cache (maxsize = 128 )
17+ @lru_cache (maxsize = 256 )
1818def get_compiled_pattern (pattern ):
1919 """Compile and cache regex patterns."""
2020 return re .compile (pattern )
@@ -23,17 +23,36 @@ def get_compiled_pattern(pattern):
2323class MatchCommand :
2424 def __init__ (self ):
2525 self .patterns = {}
26+ # Dictionary to map pattern names to their corresponding classes
27+ self .available_patterns = {
28+ 'Regex' : Regex ,
29+ 'RegexAnd' : RegexAnd ,
30+ 'RegexOr' : RegexOr ,
31+ 'RegexAndNot' : RegexAndNot ,
32+ 'RegexAndOr' : RegexAndOr ,
33+ }
2634
2735 def _find_match (self , pattern_name , content , rule ):
28- pattern_class = self .patterns .get (pattern_name ) or globals ()[pattern_name ]()
36+ pattern_class = self .patterns .get (
37+ pattern_name ) or self ._get_pattern_class (pattern_name )
2938 self .patterns .setdefault (pattern_name , pattern_class )
39+
40+ # Apply case transformation if specified in the rule
3041 case = rule .get ('input_case' )
3142 if case == 'lower' :
3243 content = content .lower ()
3344 elif case == 'upper' :
3445 content = content .upper ()
46+
47+ # Perform search
3548 return pattern_class ._perform_search (content , rule )
3649
50+ def _get_pattern_class (self , pattern_name ):
51+ """Get pattern class from the available patterns dictionary."""
52+ if pattern_name in self .available_patterns :
53+ return self .available_patterns [pattern_name ]()
54+ raise ValueError (f"Pattern '{ pattern_name } ' is not recognized." )
55+
3756
3857class MatchStrategy (ABC ):
3958 @abstractmethod
0 commit comments