![](/img/trans.png)
[英]Perl regex: string literal containing metacharacters as variable for match expression
[英]Perl regex to match metacharacters
我有一個文本文件,如下所示。
Jack Boy
Jill Girl
Jam ????
John Boy
Michelle Girl
我寫了這個,我打算只匹配包含兩個單詞的行,而不匹配Jam ????
。 它不起作用。
if ( $line =~ ( /(\w+)\s+(\w+)/ ) && !( m/\?\?\?\?/ ) )
如果您還在處理數據,那么正則表達式是錯誤的工具 。
您應該簡單地將每一行拆分為多個字段,然后檢查第二個字段是否僅包含問號。
像這樣
use strict;
use warnings;
while (my $line = <DATA>) {
my @fields = split ' ', $line;
next unless $fields[1] =~ /[^?]/;
print $line;
}
__DATA__
Jack Boy
Jill Girl
Jam ????
John Boy
Michelle Girl
輸出
Jack Boy
Jill Girl
John Boy
Michelle Girl
這些是僅有的兩種選擇:兩個單詞或一個單詞和????
?
如果是這樣,那么第一部分/(\\w)+\\s+(\\w+)/
就足夠了。
\\w
不匹配?
。
我認為不需要為您的特定輸入匹配元字符:
use warnings;
use strict;
while (<DATA>) {
print if /(\w+)\s+(\w+)/;
}
__DATA__
Jack Boy
Jill Girl
Jam ????
John Boy
Michelle Girl
先前的答案已經涵蓋了這並不是一個正確的過程,但是有時在單個if語句中通過正則表達式過濾字符串會有所幫助。
你差點就吃了! if語句的后半部分缺少匹配的運算符。
if ($line =~ (/(\\w+)\\s+(\\w+)/) && !($line =~ m/\\?\\?\\?\\?/))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.