System verilog 如何在系统verilog中搜索另一个字符串中的字符串?

System verilog 如何在系统verilog中搜索另一个字符串中的字符串?,system-verilog,System Verilog,如果我想知道stringa是否包含stringqwerty,有没有一种简单的方法可以在系统verilog中实现这一点?像下面的C代码 a.strstr("qwerty"); 目前我这样做,它的工作。但我想知道是否有更好的方法 int len = a.len(); for( int i =0; i < len;i++) begin if(a.substr(i,i+6-1) =="qwerty") $display("found it"); end int len=a

如果我想知道string
a
是否包含string
qwerty
,有没有一种简单的方法可以在系统verilog中实现这一点?像下面的C代码

a.strstr("qwerty");

目前我这样做,它的工作。但我想知道是否有更好的方法

int len = a.len();
for( int i =0; i < len;i++) begin
    if(a.substr(i,i+6-1) =="qwerty")
       $display("found it");
end
int len=a.len();
对于(int i=0;i
您可以使用Verilab提供的
svlib
库,该库将我们熟悉并喜爱的C函数封装在SystemVerilog函数中。它提供了自己的
Str
类,可以告诉您字符串是否包含某个子字符串:

Str my_str = Str::create(a);
if my_str.first("qwerty")
  $display("found it");
根据我编写的这两个函数的答案,您可以在

找到
svlib

function int contains(string a, string b);
  // checks if string A contains string B
  int len_a;
  int len_b;
  len_a = a.len();
  len_b = b.len();
  $display("a (%s) len %d -- b (%s) len %d", a, len_a, b, len_b);
  for( int i=0; i<len_a; i++) begin
    if(a.substr(i,i+len_b-1) == b)
         return 1;
  end
  return 0;
endfunction


function int startswith(string a, string b);
  // checks if string A starts-with string B
  int len_b;
  len_b = b.len();
  if(a.substr(0, len_b-1) == b)
    return 1;
  return 0;
endfunction
函数int包含(字符串a、字符串b);
//检查字符串A是否包含字符串B
int len_a;
国际图书馆;
len_a=a.len();
len_b=b.len();
$display(“a(%s)len%d--b(%s)len%d”,a,len_a,b,len_b);
对于(int i=0;i
模块测试;
string=“hello world”;
string subString=“rld”;
初始开始

对于(int i=0;如果您已经在使用DPI,iUVM还提供了一个类似的工具来使用DPI进行regexp匹配。请查看
uvm\u svcmd\u DPI.svh
@Tudor Timi-其中一个函数是什么?尽管这个问题很久以前就得到了回答,但我认为添加一个指向该函数的链接会很有用,这收到了非常好的效果。)全面/有用的答案。
    module test;
      string mainString = "hello world";
      string subString = "rld";

      initial begin
        for (int i=0; i<mainString.len()-subString.len()+1; i++) begin
          if( mainString.substr(i,i+subString.len()-1) == subString ) begin
            $display("\n it Contraints \n");
          end
        end
      end
  endmodule