【发布时间】:2013-08-14 19:54:28
【问题描述】:
我正在创建一个程序,使用户能够创建某种脚本。我在运行时编译他的脚本然后执行。我正在做类似的事情:https://stackoverflow.com/a/4181855/637142
无论如何,为了让长话短说,基本上我必须替换所有以 $ 开头的变量。用于使脚本编译的东西。 如果用户有以下行:
var x = ($MyArray[ 4 ].Size) + 3;
什么正则表达式可以让我选择$MyArray[ 4 ].Size?
如果用户在哪里写:
var x = $SomeVar;
在这种情况下,很容易找到 SomeVar 。我无法找到以 $ 开头的变量
编辑
我想我已经快要找到解决方案了。现在我将 $ 替换为 Foo. ,换句话说,我替换了该行:
var x = ($MyArray[ 4 ].Size) + 3;
为
dynamic Foo; // then
var x = (Foo.MyArray[ 4 ].Size) + 3;
现在它可以编译了,但我仍然需要找到 Foo.MyArray[ 4 ].Size
编辑 2
我不是想创建一个编译器,我只需要替换一些变量(以 $ 开头的变量)而已;)
【问题讨论】:
-
为什么需要找到
Foo.MyArray[ 4 ].Size而不是Foo?他们都应该完成替换$。 -
RegEx 不是适合这里工作的工具。正则表达式只能解析正则语言,C#(和大多数其他编程语言)是上下文无关语言,需要基于下推自动机的不同模型进行解析。如果您在谷歌上搜索这些术语,您可以了解其背后的理论。但基本上,我向你保证,没有足够的正则表达式。
-
是的,我相信我很擅长正则表达式,几乎不可能创建它。
-
你将如何处理包含
"This is $NotAVariable"的字符串?还是评论中的相同内容?我认为你低估了问题的复杂性。 -
@icemanind:我的意思是,正则表达式方法不仅仅可以重命名变量。它还会重命名字符串文字和 cmets 中的值。