簡體   English   中英

Perl正則表達式匹配數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM