我想一個參數報關行的參數名稱相匹配,如下面: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