Maç boşluk ama yeni satır (Perl)
Ben bazen boşluk maç ama yeni satır değil. Şimdiye kadar 8* *başvurmadan oldum . Daha uygun bir yolu var mı?
CEVAP
Çift negatif: kullanın
/[^\S\n]/
Platform farklılıkları önlemek için 20* *\r
\n
eşleştirmeleri ile ilgili:
/[^\S\x0a\x0d]/
O değil-değil-boşluk ya da değil-yeni satır ve benzer CR ve NL dışlayan düzeni için.
Dış dağıtma (yani, tamamlayıcı ^
karakter sınıfı) De Morgan's law, Bu eşdeğerdir “boşluk ve satır başı ve yeni satır,” ama benim sözlerimi dikkate almayın için:
#! /usr/bin/env perl
use strict;
use warnings;
use 5.005; # for qr//
my $ws_not_nl = qr/[^\S\x0a\x0d]/;
for (' ', '\f', '\t', '\r', '\n') {
my $qq = qq["$_"];
printf "%-4s => %s\n", $qq,
(eval $qq) =~ $ws_not_nl ? "match" : "no match";
}
Çıkış:
" " => match "\f" => match "\t" => match "\r" => no match "\n" => no match
Not dikey sekme hariç, ama bu addressed in v5.18.
Bu hileyi alfabetik karakterlerle eşleştirme için kullanışlıdır. \w
eşleşen unutma “kelimesi,” alfabetik karakterler ama . karakterler ^em>ayrıcarakam ve alt çizgi. Biz çirkin Amerikalılar bazen, dediğin gibi, bunu yazmak istiyorum
if (/^[A-Za-z] $/) { ... }
ama çift negatif bir karakter sınıfı yerel saygı
if (/^[^\W\d_] $/) { ... }
Biraz donuk, bir POSIX karakter sınıfı niyet ifade etmek konusunda daha iyi olabilir
if (/^[[:alpha:]] $/) { ... }
ya szbalint önerildiği gibi
if (/^\p{Letter} $/) { ... }
Bir dize işlemek ve boşluk ve yeni sat...
Nasıl Perl'in yazdırma varsayılan...
Yeni satır olmadan yazdırma (yazdırma ...
Nasıl yeni satır veya boşluk ekleyerek...
Nasıl kontrol etmek için Python metin ...