如何用正则表达式拆分Verilog网表中不同格式的元件实例描述
解决方案
适用于匹配题目给出的Verilog网表元件实例语句,支持C++ Builder、Delphi环境的PCRE兼容正则引擎。
可用正则表达式
^(\w+)(?:\s+(\w+))?\s*(?:\(\s*(.*?)\s*\))?\s*\(\s*(.*?)\s*\)\s*;
捕获组说明
- 第1组:元件类型(必填,如
xor、nmos) - 第2组:可选实例名,无实例名时该组为空
- 第3组:可选参数块内容,无单独参数括号时该组为空
- 第4组:引脚列表内容(必填)
匹配效果验证
对题目给出的4种写法均能正确拆分:
xor (pin1, pin2, pin3, pin4 ..... ) ;:第1组为xor,第2、3组为空,第4组为pin1, pin2, pin3, pin4 .....nmos (parameter ) (pin1, pin2, pin3) ;:第1组为nmos,第2组为空,第3组为parameter,第4组为pin1, pin2, pin3xor instancename (pin1, pin2, pin3, pin4 ..... ) ;:第1组为xor,第2组为instancename,第3组为空,第4组为pin1, pin2, pin3, pin4 .....nmos (parameter ) (pin1, pin2, pin3) ;:第1组为nmos,第2组为空,第3组为parameter,第4组为pin1, pin2, pin3
使用提示
C++ Builder、Delphi环境下可直接使用TPerlRegEx组件加载该正则,逐行匹配Verilog文本即可提取对应字段。如果处理的文本中存在括号嵌套场景,可将惰性匹配.*?替换为适配嵌套的正则逻辑,标准Verilog网表场景下当前写法已覆盖需求。
内容的提问来源于stack exchange,提问作者Franz
相关产品推荐
相关产品推荐

