2017-06-27 2 views
1

Je suis un nouvel utilisateur du paquet svlib dans l'environnement systemverilog. J'ai l'exemple de texte suivant, {'PARAMATER': 'lollg_1', 'SPEC_ID': '1G3HSB_1'} et je veux utiliser regex pour extraire 1G3HSB de ce texte. Pour cette raison, j'utilise l'extrait de code suivant mais j'obtiens la ligne entière au lieu de seulement l'information.Traitement Regex dans systemverilog en utilisant svlib

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

Quelqu'un peut-il me dire ce qui ne va pas? La sortie Je reçois: { 'paramater': 'lollg_1', 'SPEC_ID': '1G3HSB_1'} Et, je veux: 1G3HSB_1

+0

Y a-t-il de la documentation à ce sujet? –

+0

@ WiktorStribiżew: J'ai eu la même question et j'ai dû chercher pour trouver: http://www.verilab.com/resources/svlib/. Cela ne fait pas partie de IEEEStd pour SystemVerilog. – toolic

+0

On dirait que vous avez besoin de 'getMatchString (1);' et je pense que vous devez remplacer '. *?' Par '[^ '] *' –

Répondre

1

Il semble que vous avez besoin pour obtenir le contenu de le premier groupe de capture avec getMatchString(1). En outre, vous devez utiliser un quantificateur gourmand (les paresseux ne sont pas conformes à POSIX) et une expression de support niée - [^']* au lieu de .*?:

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

Voir les détails Guide de l'utilisateur:

getMatchString(m) est toujours exactement équivalent à appeler la méthode sur la plage Str objet contenant la chaîne qui a été recherché:

range(getMatchStart(m), getMatchLength(m)) 
+0

Merci beaucoup Wiktor. Il a résolu le problème. – Imran

+0

Juste fait. : D BTW Wiktor, pourriez-vous expliquer pourquoi. *? ne fonctionnerait pas et [^ '] * le ferait? Merci d'avance. – Imran

+0

POSIX regex ne prend pas en charge les quantificateurs paresseux. Pour faire correspondre le moins possible de caractères entre deux caractères, vous devez utiliser des expressions/classes de caractères nuls. –