2017-06-27 20 views
1

私はsystemverilog環境でsvlibパッケージを初めて使用しています。 {'PARAMATER': 'lollg_1'、 'SPEC_ID': '1G3HSB_1'}のサンプルテキストがあります。正規表現を使用して1G3HSBを抽出します。svlibを使用したシステム・イメージの正規表現処理

このため、次のコードスニペットを使用していますが、情報の代わりに行全体が表示されています。

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

+0

これに関する文書はありますか? –

+0

@WiktorStribiżew:私は同じ質問をしていました:私は見つけるためにstfwしなければなりません:http://www.verilab.com/resources/svlib/。これはSystemVerilogのIEEEStdの一部ではありません。 – toolic

+0

'getMatchString(1);'が必要なようです。 '。*?'を '[^ '] *'に置き換える必要があると思います。 –

答えて

1

あなたが内容を取得する必要がありそうです最初のキャプチャグループはgetMatchString(1)です。また、あなたは貪欲数量詞(怠惰なものはPOSIXに準拠していない)と否定ブラケット表現を使用する必要があります - [^']*代わりの.*?を:

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

は、ユーザガイドの詳細を参照してください:

getMatchString(m)は常にあります

range(getMatchStart(m), getMatchLength(m)) 
:検索した文字列を含む のStrオブジェクトの範囲メソッドを呼び出すとまったく同じ
+0

ありがとうWiktor。それは問題を解決しました。 – Imran

+0

ちょうどそれをしました。 :D ところでWiktor、理由を説明できますか?*うまくいかず、[^ '] *しますか?前もって感謝します。 – Imran

+0

POSIX正規表現は遅延量指定子をサポートしていません。 2つの文字の間で可能な限り少数の文字を照合するには、ネゲートされた括弧の式/文字クラスを使用する必要があります。 –