2012-06-01 1 views
0

У меня есть следующая переменная. Я хочу только напечатать «да», если переменная имеет «imoport/canada/campingplaces/tobermory», а не # или что-то еще. Что нужно вставить в регулярное выражение для такого рода вещей.Какое регулярное выражение должно использоваться для исключения символов перед текстом в perl?

my $textfile = "# imoport/canada/campingplaces/tobermory 
        imoport/canada/campingplaces/tobermory 
        #imoport/canada/campingplaces/tobermory"; 
    my $textNeeded= "imoport/canada/campingplaces/tobermory" 

ЭТО ЧТО Я использую

if ($textfile =~ m/$textNeeded/i) { 
     print "yes working" 

    } 

примечание: - Я получаю данные из текстовых файлов, различных поэтому некоторые текстовые файлы могут просто "# imoport/Канада/campingplaces/Tobermory". Я хочу, чтобы этого избежать

+0

быть более точным, что вы хотите, чтобы соответствовать, то есть четыре слова, разделенные '/ ', или что? – kevlar1818

+0

Почему бы просто не проверить, что первый символ строки - это буква, вместо использования регулярного выражения? – Nightfirecat

ответ

3

Несмотря на довольно неопределенное описание проблемы, я думаю, что я озадачен тем, что вы имеете в виду. Вы имеете в виду, что у вас могут быть строки, где текст закомментирован с помощью #, и вы хотите избежать их соответствия.

print "yes" if $textfile =~ /^\s*$textNeeded/im; 

Это будет соответствовать любой строке внутри $textfile, которая имеет строку с последующей необязательным пробелом с последующим вашей строкой. Опция /m делает многолистное выражение регулярным выражением, что означает, что ^ и $ окончания строки соответствия представлены символами новой строки внутри большей строки.

Возможно, вы захотите быть осторожным с метасимволами регулярных выражений в строке поиска. Если, например, ваша строка поиска равна foo[bar].txt, эти скобки будут интерпретироваться как класс символов. В этом случае вы использовали бы

/^\s*\Q$textNeeded\E/im 

вместо этого. \Q ... \E сделает текст внутри совпадающим только буквальным символом.

+0

Эй Спасибо за ваш ответ и жаль, что не положили его на правильные слова. – Maxyie

+0

@Maxyie Добро пожаловать. – TLP

1

Я думаю, вам нужно создать якорь, чтобы сказать, что вы хотите совпадение, если ваша целевая строка появляется в начале жизни. При этом используется символ вверх-каратного:

если ($ текстовый файл = ~ м/^ $ textNeeded/я) { печать "да работает"

}

Это обыкновение сообщать матч, если у вас есть пробелы или вкладки перед строкой textNeeded.

+0

эй, я уже пробовал это. это работает только в том случае, если ваша переменная подобна этому ex my $ textfile = "# imoport/canada/campingplaces/tobermory"; имеет это ", но что, если ваша переменная содержит оба значения: один с # и один без? – Maxyie

0

Чтобы просто вернуть строки, не имеющие ведущий хэш, что-то вроде этого:

my $textfile = "# imoport/canada/campingplaces/tobermory 
        imoport/canada/campingplaces/tobermory 
        #imoport/canada/campingplaces/tobermory"; 

for (split /^/, $textfile) { 
    print $_ if(m/^\s*[a-zA-Z].*/); 
} 

возвращений:

   imoport/canada/campingplaces/tobermory 
Смежные вопросы