我正在尝试解析我的VHDL代码以进行一些额外的检查。
我正在寻找一个寻找字符串文字的正则表达式。字符串文字用双引号括起来,如下所示:
" {characters} "
目前的问题是以下要求:
如果要在引号中表示引号值 字符值序列,然后一对相邻的引号必须写在相应的 放在字符串文字中。
这意味着以下是合法的字符串文字:
""""
" random stuff "" random stuff "
我不确定是否:
("(("")*[^\n"]*)*")
充分涵盖
答案 0 :(得分:6)
如果你想让它完全证明,你可能需要一个完整的词法分析器而不是正则表达式。我在这里阅读的建议可能会导致误报,例如:
a <= '"'; -- assigns the character " to signal a.
您的正则表达式将匹配"'; -- assigns the character "
。
然后,如果您的代码在注释或字符文字或字符串中不包含任何奇怪的双引号,那么最简单的正则表达式将适合您。
答案 1 :(得分:3)
我希望/"([^"]|"")+"/
可以满足您的大部分需求。请试一试。
修改:+
应为*
。 OP自己比我更了解正则表达式!
答案 2 :(得分:0)
你可以试试这个:(伪代码 / regex / )
/(?<!["\\])"(\w\s)+"(?!")/
然后使用正则表达式反向引用:
replace = "\"" + match.$1 + "\""
注意:此表达式尝试不匹配已转义的双引号(回顾过去,看不到\
或"
,但是从{{1}开始实际上是一个常规的双引号,前面是常规的反斜杠,the more you think about it the more complicated it gets。