gpt4 book ai didi

regex - 我怎样才能模式匹配类似于正则表达式的标记?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:26:15 29 4
gpt4 key购买 nike

我正在寻找一种方法(算法/开源项目/???)通过构建类似于正则表达式的模式或使用类似的原则来匹配 token 。

我将尝试通过示例来描述我的问题。假设我有以下 SQL INSERT 语句:

INSERT INTO [dbo].[Table] (Column1) VALUES (@Column1);

而且假设我能够将该 SQL 解析为标记(我可以),它们看起来像这样:

+-------------------+-------+
| INSERT | token |
| INTO | token |
| QUOTEDIDENTIFIER | token |
| DOT | token |
| QUOTEDIDENTIFIER | token |
| LEFTPARENTHESIS | token |
| IDENTIFIER | token |
| RIGHTPARENTHESIS | token |
| VALUES | token |
| LEFTPARENTHESIS | token |
| VARIABLE | token |
| RIGHTPARENTHESIS | token |
| SEMICOLON | token |
+-------------------+-------+

所以假设我有一个标记流并且我想匹配任何 INSERT 语句(这是唯一有效的语法)我会写一个理论上的 regex-esque 模式,如下所示:

INSERT\s+INTO\s+
QUOTEDIDENTIFIER\s*DOT\s*QUOTEDIDENTIFIER\s*LEFTPAR\s*IDENTIFIER\s*RIGHTPAR
\s*VALUES\s*LEFTPAR\s*VARIABLE\s*RIGHTPAR\s*;

但我知道 INSERT 语句可以有多种形式,例如:

INSERT INTO Table (  Column1) VALUES (@Column1  )
INSERT INTO Table (Column1, Column2) VALUES (@Column1, @Column2 );
INSERT INTO [dbo].[Table] (Column1, Column2) VALUES (@Column1, @Column2 );

所以我可以很容易地创建一个理论上的正则表达式式模式来匹配这些语句的所有标记变体,但我如何才能真正做到这一点?

为什么我实际上不使用正则表达式?因为我已经在流中有了解析的 token ,所以似乎应该有一个解决方案。我发誓我以前见过类似的东西。

最佳答案

不要为此使用正则表达式。

您尝试做的是 lexical analysis而更适合这项工作的工具是词法分析器或词法分析器。

如果你喜欢 Python,我用过 PLY并取得了成功。他们是 samples scripts也可用,您可以引用。如果没有,大多数现代语言都有可用于词法分析的库或模块。

关于regex - 我怎样才能模式匹配类似于正则表达式的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297581/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com