【发布时间】:2016-02-25 09:55:17
【问题描述】:
在 Perl 正则表达式中,the documentation 表示
... 在标量上下文中,
$time =~ /(\d\d):(\d\d):(\d\d)/返回 true 或假值。然而,在列表上下文中,它返回的列表 匹配值($1,$2,$3)
但是,当您提供替代选项时 - 当没有找到匹配项时 - 即使在列表上下文中也会分配 TRUE 或 FALSE?
例如,我想将匹配的组分配给一个变量,如果没有找到,使用字符串值 ALL。
my ($var) = $string =~ /myregex/ || 'ALL';
这可能吗?那么多个捕获的组呢?例如
my ($var1, $var2) = $string =~ /(d.t)[^d]+(d.t)/ || 'dit', 'dat';
如果第一个组不匹配,则使用'dit',如果没有找到第二个匹配,则使用'dat'。
【问题讨论】:
-
必须是单排吗?
ifelse并使用$1和$2可能更具可读性 -
@Recct 没必要——只要它是有效的。
-
同样在
||之后,如果左边的所有内容都是错误的,那么即使你使用较弱的or,假设在正则表达式失败时应用仍然没有任何事情发生在右边.
标签: regex perl capturing-group