Perl - regex - я хочу прочитать и найти в каждой строке строку, за которой следует «;» - PullRequest
0 голосов
/ 10 марта 2012

Я играю и изучаю Perl, чтобы читать журналы. Я хочу найти каждую строку и найти строку буквенно-цифровых символов, за которой следует ; в начале каждой строки.

Это часть того, что у меня есть:

 if ($line =~ /\S([a-zA-Z][a-zA-Z0-9]*)/)

но я думаю, что это неправильно.

Пожалуйста, сообщите.

Ответы [ 2 ]

3 голосов
/ 11 марта 2012

«Буквенно-цифровой» теперь немного двусмысленно, поскольку многие люди, все еще зараженные ASCII, думают, что это означает AZ с 0-9, но Perl думает об этом по-разному в зависимости от версии ( Знайте свои классы персонажей с различной семантикой ).Как и с любым регулярным выражением, ваша работа заключается в разработке шаблона, который включает в себя только то, что вы хотите, и не исключает того, что вы действительно хотите.

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

Я склонен писать такие вещи как:

my $alphanum = qr/[a-z0-9]/i;
my $regex    = qr/
    \A              # absolute start of string
    (?:$alphanum)+  # I can change this elsewhere
    ;
    /x;

if( $line =~ $regex ) { ... }
2 голосов
/ 10 марта 2012

Попробуйте:

if ($line =~ /^[a-z0-9]+;/i) { ... }

^ соответствует началу строки.+ соответствует один или несколько раз./i делает поиск нечувствительным к регистру.

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