簡體   English   中英

Perl正則表達式匹配元字符

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

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