如何使用正则表达式从perl中的一组字符中准确地检查一个字符。假设来自(abcde),我想检查所有这5个字符中是否只出现了一个可以多次出现的字符。它不适用于一组字符。
答案 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。它将返回数组的长度。