我想一个参数报关行的参数名称相匹配,如下面:Perl非贪婪匹配 - 是“?”字符使用正确吗?
parameter BWIDTH = 32;
使用Perl的正则表达式为:
$line =~ /(\w+)\s*=/
其中参数名称,BWIDTH
,被捕获到$1
。我遇到的大多数参数都以这样一种方式声明,即名称在等号"="
之前,这就是正则表达式设计为"="
(/(\w+)\s*=/
)的原因。
但也有在参数声明的特殊情况:
parameter reg [31:0] PORT_WIDTH [BWIDTH-1:0] = 32;
在这种情况下,我想捕捉参数名称为PORT_WIDTH
。修改正则表达式以匹配此实例不会成功捕获PORT_WIDTH
,但它确实捕获了BWIDTH
的罚款。
$line =~ /(\w+)(\s*\[.*?\])*\s*=/
其中(\s*\[.*?\])*
匹配reg [31:0] PORT_WIDTH [BWIDTH-1:0]
这是贪婪匹配。
我很困惑,为什么元字符?
不停止贪婪的匹配?我应该如何修改正则表达式?
重新 “* Perl的非贪婪匹配 - 是的‘’正确使用的字符*?”,如果你使用它,只能作为?一个优化,我会争辩说不。 – ikegami