regex 在SystemVerilog中使用svlib从字符串中提取正则表达式匹配

l2osamch  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(144)

我是SystemVerilog环境下的svlib包的新用户。参见Verilab svlib。我有以下示例文本:

{'PARAMATER': 'lollg_1', 'SPEC_ID': '1G3HSB_1'}

我想用正则表达式从文本中提取1G3HSB
我使用下面的代码片段,但我得到的是整行,而不是只提取的字符串。

wordsRe = regex_match(words[i], "\'SPEC_ID\': \'(.*?)\'");
$display("This is the output of Regex: %s", wordsRe.getStrContents())

有人能告诉我哪里出了问题吗?我得到的输出:

{'PARAMATER': 'lollg_1', 'SPEC_ID': '1G3HSB_1'}

我想得到:

1G3HSB_1
jv2fixgn

jv2fixgn1#

看起来你需要用getMatchString(1)获取第一个捕获组的内容。此外,你需要使用一个贪婪的量词(懒惰的量词不符合POSIX)和一个否定的括号表达式-[^']*而不是.*?

wordsRe = regex_match(words[i], "\'SPEC_ID\': \'([^\']*)\'");
$display("This is the output of Regex: %s", wordsRe.getMatchString(1))

请参阅用户指南详细信息:
getMatchString(m)总是完全等效于在包含搜索字符串的 Str 对象上调用range方法:

range(getMatchStart(m), getMatchLength(m))

相关问题