ровно один раз из набора символов Perl с использованием регулярных выражений - PullRequest
0 голосов
/ 29 сентября 2018

как проверить ровно один символ из группы символов в perl, используя regexp. В качестве примера из (abcde) я хочу проверить, произошел ли только один из этих 5 символов, который может встречаться несколько раз. Я пробовал квантификаторы, ноон не работает для набора символов.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Вы можете использовать следующее соответствие регулярному выражению:

/
   ^
   [^a-e]*+
   (?: a [^bcde]*+
   |   b [^acde]*+
   |   c [^abde]*+
   |   d [^abce]*+
   |   e [^abcd]*+
   )
   \z
/x

Ниже приведен более простой шаблон, который может быть менее эффективным:

/ ^ [^a-e]*+ ([a-e]) (?: \1|[^a-e] )*+ \z /x

Решение без регулярных выражений может быть проще.

# Count the number of instances of each letter.
my %chars;
++$chars{$_} for split //;

# Count how many of [a-e] are found.
my $count = 0;
++$count for grep $chars{$_}, qw( a b c d e );

$count == 1
0 голосов
/ 29 сентября 2018

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

my @arr = "abcdeaa" =~ /a/g; print scalar @arr ."\n";

печатает 3

 my @arr = "bcde" =~ /a/g; print scalar @arr ."\n";

печатает 0

, если вы используете скаляр @arr.он вернет длину массива.

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