Ich versuche, reguläre Ausdrücke in SystemVerilog zu verwenden. Die Zeichenklasse "\ d" (eine Ziffer) scheint nicht zu funktionieren, während andere Zeichenklassen wie "\ w", "\ s" gut funktionieren. Ich habe mit SVLIB und UVM versucht, dasselbe Verhalten.SystemVerilog & RegEx: " d" wird nicht als Zeichenklasse erkannt
Um zu reproduzieren habe ich den folgenden Code geschrieben. Der Code testet nur "1" gegen Regex "\ d" und "\ w" mit UVM und SVLIB.
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
Ich habe die folgende Ausgabe:
-------------------------------------
test string: 1
regex: \d
-------------------------------------
test string: 1
regex: \w
SVLIB Test passed!
UVM Test passed!
Was ist der Grund für dieses Verhalten? Das zugrunde liegende System? Etwas in der SV-Syntax?
[0-9] + statt? –
'\ d' ist nur ein konventionelles Symbol, es ist nicht zwingend erforderlich, dass eine Software es erkennt.Verwenden Sie einfach' [0-9] ' – horcrux
Ist es das gleiche auf Ihrem Systeme oder ist es nur meins? – Andy