我需要编写一个正则表达式来确保变量是常量,给定如下输入:
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
之后只有一个空格我的表达式不起作用。
此外,每个变量(N
,MAX
,stant
)都应单独匹配:
const\s.*(\]|\s|\*)N(\(|\[|=|\s|;)
这应该只选择字符串:const size N = 1;
答案 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
获取全局变量谢谢大家!