0
在Perl的正則表達式,the documentation說指定捕獲組的值,如果沒有匹配:指定字符串
...在標量上下文,
$time =~ /(\d\d):(\d\d):(\d\d)/
返回真 或假值。在列表環境,但是,它返回 匹配的值($1,$2,$3)
但它是如何,當你提供另一種選擇的清單 - 當沒有找到匹配 - TRUE或FALSE將甚至在列表上下文分配時?
作爲示例,我想將匹配的組分配給變量,如果找不到,請使用字符串值ALL。
my ($var) = $string =~ /myregex/ || 'ALL';
這可能嗎?那麼多個被捕獲的組呢?例如。
my ($var1, $var2) = $string =~ /(d.t)[^d]+(d.t)/ || 'dit', 'dat';
其中如果所述第一組不匹配,則使用'dit'
,如果沒有匹配的第二發現'dat'
。
它有沒有成爲一個班輪? 'if'' else'並使用'$ 1'和'$ 2'可能會更具可讀性 – Recct
@Recct它不必是 - 只要它有效。 –
在'||'之後,如果左邊的所有內容都是false,即使您使用較弱的'或',假如正則表達式失敗仍然沒有任何事情發生在右邊。 – Recct