我試圖在SystemVerilog中使用正則表達式。字符類「\ d」(一個數字)似乎不起作用,而其他字符類(如「\ w」,「\ s」)正常工作。我嘗試了SVLIB和UVM,同樣的行爲。SystemVerilog&RegEx:「 d」不被識別爲字符類
重現我寫下面的代碼。代碼除了使用UVM和SVLIB針對正則表達式「\ d」和「\ w」測試「1」。
module SandBox;
import svlib_pkg::*;
import uvm_pkg::*;
initial
begin
Str myString;
Regex regex;
string testString;
string reString;
testString = "1";
reString = "\\d";
myString = Str::create(testString);
regex = Regex::create();
regex.setRE(reString);
$display("-------------------------------------");
$display("test string: %s", testString);
$display("regex: %s", reString);
if (regex.test(myString)) begin
$display("SVLIB Test passed!");
end
if (!uvm_re_match(reString, testString)) begin
$display("UVM Test passed!");
end
testString = "1";
reString = "\\w";
myString = Str::create(testString);
regex = Regex::create();
regex.setRE(reString);
$display("-------------------------------------");
$display("test string: %s", testString);
$display("regex: %s", reString);
if (regex.test(myString)) begin
$display("SVLIB Test passed!");
end
if (!uvm_re_match(reString, testString)) begin
$display("UVM Test passed!");
end
end
endmodule
我有以下的輸出:
-------------------------------------
test string: 1
regex: \d
-------------------------------------
test string: 1
regex: \w
SVLIB Test passed!
UVM Test passed!
什麼是這種現象的原因?底層系統? SV語法中的東西?
[0-9] +而不是? –
'\ d'只是一個傳統的符號,它不是軟件識別它的必需條件,只需使用'[0-9]' – horcrux
就可以了系統還是隻是我的? – Andy