如何在Perl中匹配混合空格和()?

Nan*_* HE 0 regex perl

如何改进我的Perl正则表达式以处理__DATA__以下问题?

my ($type, $value) =~ /<(\w+)\s+(.*?)\(\)>/;  

__DATA__
<dynamic DynamicVar>
<dynamic DynamicVar > # not need attache the blackspace to $value when return
<dynamic DynamicFun()>
<dynamic DynamicFun() > # not need attache the blackspace to $value when return
Run Code Online (Sandbox Code Playgroud)

我想返回$type,并$value为这种格式<$type $value>.

Sch*_*ern 7

而不是担心内容的细节,只需匹配括号内的任何内容.

my($type, $value) = m{< (\w+) \s+ (.*?) \s* >}x;
Run Code Online (Sandbox Code Playgroud)

.*?意味着匹配任何非贪婪的东西,这意味着它将寻找第一个匹配的东西,而不是最长的东西.这意味着它不会在最后拾取空白,它将留给它\s*.这也意味着它不会被愚弄<foo bar> and then a >.