बाहर की संख्या की गणना है:
my $p_count = map /p/g, />(.*)[^a]/;
स्व निहित:
local our $p_count;
/
(?{ 0 })
>
(?: p (?{ $^R + 1 })
| [^p]
)*
[^a]
(?{ $p_count = $^R; })
/x;
दोनों मामलों में, आप आसानी से सभी अक्षरों को गिनने के लिए इसका विस्तार कर सकते हैं ।
let count=0
testarray=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
string="> plantagenetgoosewagonattributes" # the string
pattern=">(.*)[^a]+" # regex pattern
limitvar=${#testarray[@]} #array length
[[ $string =~ $pattern ]] &&
(while [ $count -lt $limitvar ] ; do sub="${BASH_REMATCH[1]//[^${testarray[$count]}]}" ; echo "${testarray[$count]} = ${#sub}" ; ((count++)) ; done)
बैश 3 से घूर: उदाहरण के लिए,
my %counts;
if (my ($seq = />(.*)[^a]/) {
++$counts{$_} for split //, $seq;
}
my $p_count = $counts{'p'};
हाँ! * के लिए पांच अपवॉट * आप नहीं कर सकते हैं। मुझे कड़ी मेहनत करनी चाहिए! – Borodin
रेगेक्स के भीतर पूरी तरह से करना संभव है। मेरा जवाब देखें – ikegami
नकारात्मक में "AFAIK" उत्तर मूल रूप से हमेशा खराब पोस्टिंग विकल्प होता है। यदि आप यह समझा नहीं सकते कि यह असंभव क्यों है, तो उन्हें क्यों बताएं कि आपको लगता है? – Mark