【发布时间】:2020-11-13 18:56:26
【问题描述】:
我正在为 xHabour 语言创建一个搜索和存储函数名称的应用程序。
为了在单个存档中获取所有功能,我使用解析所有内容
RegexOptions options = RegexOptions.Multiline | RegexOptions.IgnoreCase;
string[] parts = Regex.Split(content, @"(static|^^).*function\s(.*)\)", options);
content 变量包含我解析的文件中的所有缓冲区
在大多数情况下,他的所有功能都可以,但是在某些功能的中间出现FUNCTION这个词,并且正则表达式也越来越多
代码示例:
Function dropProcedure(cProcedure, cDatabase )
local cCmdSql := ''
cProcedure := lower( cProcedure )
cCmdSql := 'DROP FUNCTION if exists '+cDataBase+'.`'+cProcedure+'`'+CRLF
return sqlexecute( cCmdSql )
我的问题是如何使用正则表达式来避免这种情况
关闭:我尝试使用 language grammar TextMate 架构,但我在 C# 中找不到任何示例来使用此架构解析器或 vscode (here) 从那时起如何实现解析器(我找到了 xharbour/ 的整个架构海港here)
【问题讨论】:
-
(static|^).*?function\s(.*)\)适合你吗? -
不,他正在获取“字符串”声明中的函数
-
这就是为什么正则表达式不适合解析编程语言,它用于处理简单的正则表达式
-
@TheGeneral 是的,但是在这种情况下可以工作,我唯一缺少的是字符串中的函数
-
如果你想走这条路,最好显示你需要解析的函数签名的类型,这样有人可以编写更合适的正则表达式