正则表达式以确保变量是常量

时间:2012-06-28 12:25:50

标签: c# .net regex

我需要编写一个正则表达式来确保变量是常量,给定如下输入:

const size N = 1;
const size MAX = 1;
int const stant = 1147;
int x = 4;

这是我创建的表达式:

const\s.*(\]|\s|\*)VARIABLETOCHECK(\(|\[|=|\s|;)

表达式说明:

  • \s - space afrer“const”。
  • .* - 任意数量的任何符号。
  • (\]|\s|\*) - 应该在变量之前的符号。
  • VARIABLETOCHECK是我设置我要检查的变量名称的地方。
  • (\(|\[|=|\s|;) - 应该在变量之后的符号

问题:

问题是如果单词const之后只有一个空格我的表达式不起作用。

此外,每个变量(NMAXstant)都应单独匹配:

const\s.*(\]|\s|\*)N(\(|\[|=|\s|;)

这应该只选择字符串:const size N = 1;

4 个答案:

答案 0 :(得分:1)

使用正则表达式:

\bconst\b\s*(?:.*\b)?(VARIABLETOCHECK\b[^=]*?)\s*\=\s*(.*?)\s*[,;]

请参阅测试代码here。如果它验证“const”语法,则返回变量名称及其值。

答案 1 :(得分:1)

如果我理解你的问题,你的目标就是确保一个条目是一个常数。

输入:文字行

预期输出:如果是常量则为真,否则为假


正则表达式:

为此,我建议使用以下正则表达式:

^.*?const\s+(\w+\s+)?(\w)\s+=.*$

说明:

^行首

.*?任何字符都匹配且非贪婪

const关键字

\s+至少有一个空白

(\w+\s+)?可选单词,不是变量名称。

(\w) Word是变量名。

\s+可选空格

=等于字面值

.*任何角色

$行尾

如果要使用预定义的名称列表进行验证,正则表达式中的第二个组将为您提供变量名称。


上述正则表达式的结果:

const size N = 1; ==>的

const size MAX = 1; ==>的

int const stant = 1147; ==>的

int x = 4; ==>的

您可以选择通过在匹配器中获取第二个组来获取变量名称。

我不会硬编码VARIABLETOCHECK,在大多数情况下硬编码都是不好的做法。

答案 2 :(得分:0)

这非常尴尬,只适用于该语言的一些测试用例。编写以与c#相同的方式解析的正则表达式非常困难。但是,让我们使用你拥有的东西。

你写的“应该在变量之前的符号”,但你的意思是“可以在变量之前去的符号”,对吧?因此,您之后需要*来表示这些字符可能会或可能不会发生:

const\s.*(\]|\s|\*)*VARIABLETOCHECK(\(|\[|=|\s|;)

现在,你的变量之前有.*,这意味着任何字符串。您应该至少使用

排除;=
const\s[^;=]*(\]|\s|\*)*VARIABLETOCHECK(\(|\[|=|\s|;)

答案 3 :(得分:0)

我走错了路。

解决方案是下一个: 1.下载Doxygen 2. xml格式的gen报告 3.从xml

获取全局变量

谢谢大家!