使用正则表达式从一组字符perl中仅一次

时间:2018-09-29 17:36:01

标签: regex perl

如何使用正则表达式从perl中的一组字符中准确地检查一个字符。假设来自(abcde),我想检查所有这5个字符中是否只出现了一个可以多次出现的字符。它不适用于一组字符。

2 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式匹配项:

/
   ^
   [^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

答案 1 :(得分:0)

您可以使用正则表达式返回匹配项列表。然后您可以将结果存储在数组中。

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

打印3

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

打印0

如果使用标量@arr。它将返回数组的长度。