[英]Perl regex match array
我對正則表達式非常糟糕,並嘗試在谷歌搜索,但我嘗試的一切都沒有用。
這是我的代碼:
@liner = split(/\s+/, $_);
foreach my $v (@liner) {
if ($v =~ /*.duplex.*/) {
print ECRIRE ";$v";
}
}
$ v包含類似:“全雙工”,但可以包含其他內容,如“半雙工”,....
所以我希望我的條件匹配“任何字符”雙工“任何字符”。
我試過if ($v =~ /(*.)duplex(.*)/)
還有一些,但沒有工作。 誰能幫我嗎?
foreach (split(/\s+/)) {
print ECRIRE ";$_" if /duplex/i;
}
幸運的是,Perl RegEx與整個字符串不匹配,這意味着您不必使用“。*”前綴和后綴所有內容:
/abcd/
是的同義詞
/.*abcd.*/
(除非您使用的特定選項為點的匹配字符添加換行符)
在所有情況下,此循環都匹配所有雙工(/ i使RegEx不區分大小寫)。
(未經測試,但手指交叉)
List::MoreUtils
模塊具有firstval
函數,該函數將返回滿足特定約束的列表中的第一個值。 它對於編寫簡潔易讀的代碼非常有用。 它不是核心模塊,您可能需要安裝它。
正如其他人所說,正則表達式中你需要的只是/duplex/
,因為它將檢查字符串是否包含字符串。 您可以使用/duplex/i
增強它,而不執行不區分大小寫的匹配。
最后,如果你正在寫split /\\s+/
那么你幾乎肯定想要split ' '
; 這是一個文字的單空格字符串 ,而不是正則表達式,如果您不提供第一個參數,它是split
的默認值 。 不同之處在於,如果目標字符串以空格開頭 ,則使用/\\s+/
進行拆分將返回一個空字符串作為列表的第一個元素,而使用' '
將返回非空格字符。 如果您根本沒有傳遞任何參數進行split
那么它相當於split ' ', $_
這通常是您想要的。
這個簡短的計划證明了這些觀點
use strict;
use warnings;
use List::MoreUtils 'firstval';
$_ = 'simplex full-duplex half-duplex';
print firstval { /duplex/ } split;
產量
full-duplex
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.