Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdcf1125

Browse files
committed
parse regex
1 parent2678646 commitdcf1125

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

‎uncoder-core/app/translator/platforms/base/sql/tokenizer.py‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
fromapp.translator.core.custom_types.tokensimportOperatorType
2323
fromapp.translator.core.custom_types.valuesimportValueType
2424
fromapp.translator.core.models.query_tokens.field_valueimportFieldValue
25+
fromapp.translator.core.models.query_tokens.function_valueimportFunctionValue
2526
fromapp.translator.core.models.query_tokens.identifierimportIdentifier
27+
fromapp.translator.core.models.query_tokens.keywordimportKeyword
2628
fromapp.translator.core.tokenizerimportQueryTokenizer
2729
fromapp.translator.platforms.base.sql.str_value_managerimportsql_str_value_manager
2830
fromapp.translator.tools.utilsimportget_match_group
@@ -49,6 +51,7 @@ class SqlTokenizer(QueryTokenizer):
4951
)
5052
_value_pattern=rf"{num_value_pattern}|{bool_value_pattern}|{single_quotes_value_pattern}"
5153
multi_value_pattern=rf"""\((?P<{ValueType.multi_value}>\d+(?:,\s*\d+)*|'(?:[:a-zA-Z\*0-9=+%#\-\/\\,_".$&^@!\(\)\{{\}}\s]|'')*'(?:,\s*'(?:[:a-zA-Z\*0-9=+%#\-\/\\,_".$&^@!\(\)\{{\}}\s]|'')*')*)\)"""# noqa: E501
54+
re_field_value_pattern=rf"""regexp_like\({field_pattern},\s*'(?P<{ValueType.regex_value}>(?:[:a-zA-Z\*\?0-9=+%#№;\-_,"\.$&^@!\{{\}}\[\]\s?<>|]|\\\'|\\)+)'\)"""# noqa: E501
5255

5356
wildcard_symbol="%"
5457

@@ -77,6 +80,22 @@ def create_field_value(field_name: str, operator: Identifier, value: Union[str,
7780
field_name=field_name.strip('"')
7881
returnFieldValue(source_name=field_name,operator=operator,value=value)
7982

83+
def_search_re_field_value(self,query:str)->Optional[tuple[FieldValue,str]]:
84+
ifmatch:=re.match(self.re_field_value_pattern,query,re.IGNORECASE):
85+
group_dict=match.groupdict()
86+
field_name=group_dict["field_name"]
87+
value=self.str_value_manager.from_re_str_to_container(group_dict[ValueType.regex_value])
88+
operator=Identifier(token_type=OperatorType.REGEX)
89+
returnself.create_field_value(field_name,operator,value),query[match.end() :]
90+
8091
deftokenize(self,query:str)->list:
8192
query=re.sub(r"\s*ESCAPE\s*'.'","",query)# remove `ESCAPE 'escape_char'` in LIKE expr
8293
returnsuper().tokenize(query)
94+
95+
def_get_next_token(
96+
self,query:str
97+
)->tuple[Union[FieldValue,FunctionValue,Keyword,Identifier,list[Union[FieldValue,Identifier]]],str]:
98+
query=query.strip("\n").strip(" ").strip("\n")
99+
ifsearch_result:=self._search_re_field_value(query):
100+
returnsearch_result
101+
returnsuper()._get_next_token(query)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp