SORU
12 AĞUSTOS 2010, PERŞEMBE


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
12 AĞUSTOS 2010, PERŞEMBE


Ç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} $/) { ... }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013
  • Crossover

    Crossover

    18 HAZİRAN 2007
  • Video Copilot

    Video Copilo

    21 EYLÜL 2006