Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 读取字符串的内圆括号(VB.NET)_Regex_Vb.net_String_Parentheses - Fatal编程技术网

Regex 读取字符串的内圆括号(VB.NET)

Regex 读取字符串的内圆括号(VB.NET),regex,vb.net,string,parentheses,Regex,Vb.net,String,Parentheses,我正在用visualbasic开发一个计算器函数。我认为默认的.NET库中没有基本的 我使用System.Data.DataTable.Compute()来计算正常的数学表达式。但我希望我的函数也能解像Sinus()或Round()这样的函数 目前我正在为此使用正则表达式。例如,对于我使用的带有一个参数的函数 Dim expr As String=Regex.Replace(术语“(?[A-Za-z]*?)\((?[0-9,.]*?)\”,FunctionLibrary.Funcs1的地址) S

我正在用visualbasic开发一个计算器函数。我认为默认的.NET库中没有基本的

我使用
System.Data.DataTable.Compute()
来计算正常的数学表达式。但我希望我的函数也能解像Sinus()或Round()这样的函数

目前我正在为此使用正则表达式。例如,对于我使用的带有一个参数的函数

Dim expr As String=Regex.Replace(术语“(?[A-Za-z]*?)\((?[0-9,.]*?)\”,FunctionLibrary.Funcs1的地址)

Sinus()函数如下所示:
sin(Number)

但这只允许在参数中写入双精度或整数。我无法编写内部函数,甚至无法在括号之间编写另一个数学表达式

如果我将编写更多函数作为参数,正则表达式将检测函数内部的第一个“)”作为外部函数的结尾,这是内部函数的右括号

有没有办法让正则表达式认识到还有一个内部函数

如果有人知道默认.NET库中Visual Basic的Evaluate()函数,这可能也会对我有所帮助

有没有办法让正则表达式认识到还有一个内部函数

不,没有。正则表达式,顾名思义,解决语法和简单的数学表达式是非常重要的。正则表达式没有与任意表达式匹配的堆栈。例如,区分
(())
(()
至少需要一个前视(或回溯)字符。是的,PCRE样式的正则表达式可以让您创建固定数量的先行字符,但据我所知,您必须指定字符数,无论如何,这不会解决您的问题

计算算术表达式需要处理优先级、子表达式、可能的变量和类型。正则表达式无法做到这一点,尝试使用正则表达式将导致失败

甚至没有必要。计算数学表达式是一个已解决的问题,有几十个解析器和求值器已编写、测试并准备好让您投入到应用程序中。你没有给我们足够的信息来决定哪一个最适合你,而且不管怎样,Stack Overflow不是一个工具宣传网站。你可以在Gary Beene的评论中浏览列表