Почему цифры отображаются с помощью регулярных выражений Perl? - PullRequest
0 голосов
/ 01 августа 2011

Я использую \ D, чтобы не отображать цифры, но почему цифры отображаются с помощью регулярных выражений perl?

Вот содержимое файла text2.tx

1. Hello Brue this is a test.
2. Hello Lisa this is a test.
This is a test 1.
This is a test 2.

Вот программа perl.

#!/usr/bin/perl

use strict;
use warnings;

open READFILE,"<", "test2.txt" or die "Unable to open file";

while(<READFILE>)
{
   if(/\D/)
   {
      print;
   }
}

Ответы [ 3 ]

3 голосов
/ 01 августа 2011

/ \ D / просто проверяет, что в строке есть хотя бы один нецифровый символ (включая символ новой строки ...).Можете ли вы объяснить, что вы хотели проверить?Какой выход вы ожидали?

Если вы хотите печатать только строки без цифр, вы должны сделать:

if ( ! /\d/ )

(строка не имеет цифры), а не

if ( /\D/ )

(строка не содержит цифр).

2 голосов
/ 01 августа 2011

Давайте посмотрим, что происходит за кулисами. Ваш цикл while эквивалентен:

while(defined($_ = <READFILE>))
{
    if($_ =~ /\D/)
    {
        print $_;
    }
}

Итак, вы проверяете, содержит ли строка нецифровый символ (что она и делает), и затем печатаете эту строку.

Если вы хотите напечатать Hello Brue this is a test. вместо 1. Hello Brue this is a test., вам придется использовать что-то вроде:

while(<READFILE>) {
    s/^\d+\. //;
    print;
}

Кроме того, это сделало бы код более читабельным, если бы вы использовали переменную вместо $_.

1 голос
/ 01 августа 2011

Вам нужно отклонить строки, которые имеют цифры, а не совпадать со строками, которые не имеют цифр (как вы делаете)

while (<READFILE>) {
   print unless /\d/;
}

Это будет печатать каждую строку , если только на нем есть цифра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...