说明:
我正在制作一个抄袭检测应用程序,它会从.c,.cpp文件中读取学生提交的源代码,并提取所有变量名称以对它们执行某些操作。
我尝试了什么:
我尝试使用正则表达式,但是id不起作用
textBox1.Text = "int sum,a;";
System.Text.RegularExpressions.Regex regex =
new System.Text.RegularExpressions.Regex(
@"^[a-zA-Z](([a-zA-Z0-9]*)|(_[a-zA-Z0-9]_*)|(_[a-zA-Z0-9]*)|([a-zA-Z0-9]_*))$");
if (regex.IsMatch(textBox1.Text))
{
MessageBox.Show("Value is correct.");
}
else
{
MessageBox.Show("Value is not correct.");
}
有人能告诉我我做错了什么或者至少让我朝着正确的方向前进吗?
答案 0 :(得分:0)
我不确定正则表达式是否是做你想做的事情的好方法。我只使用它们来查找某些文本模式。问题是,并非每个与您的表达式匹配的单词都是变量名,您必须过滤关键字,字符串文字,常量定义等。
我建议解析代码,然后走抽象语法树,解析树或解析器生成的任何内容。
ANTLR文档中给出了如何做这样的事情的一个很好的例子。据我记得,他们提供了C语言和C ++语法。
答案 1 :(得分:-1)
内置支持在P5RE语法中识别这种令牌。要获得有关P5正则表达式的帮助,请询问一些P5程序员:)特别是请查看PerlMonks网站。 Here is a reference来自马的嘴。代码\ w是“单词字符(字母数字和下划线)。零宽度断言是\ b表示字边界,\ B表示不是字边界。Here是一个教程。