2017年2月26日日曜日

開発環境

Think Perl 6: How to Think Like a Computer Scientist (Laurent Rosenfeld(著)、Allen B. Downey(著)、Oreilly & Associates Inc)のChapter 7(Strings)のExercises on regexesを取り組んでみる。

Exercises on regexes

コード(Emacs)

#!/usr/bin/env perl6

while True {
    my $str = $*IN.get;
    last if $str eq 'q' ;
    say $str;
    say ~$/, ': Matched!' if $str ~~ /^\D*\d**10\D*$/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$/, ': Matched!' if $str ~~ /^<[0..7]>+$/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$0, ': first word' if $str ~~ /^(\w+)/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$0, ': first word (a)' if $str ~~ /^(a\w*)/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$0, ': first word (lower case vowel)' if $str ~~ /^(<[aeiou]>\w*)/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$0, ': French mobile' if $str ~~ /^((06|07)\d**8)$/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$0, ': first word (case vowel)' if $str ~~ /^(:i<[aeiou]>\w*)/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$/, ': double letter' if $str ~~ /(.)$0/;
}

while True {
    my $str = $*IN.get;
    last if $str eq 'q';
    say $str;
    say ~$/[1], ': double letter(second)' if ($str ~~ m:g/(\w)$0/) and $/[1];
}

入出力結果(Terminal)

$ ./regexes.pl < input1.tx 

1
123456789
1234567890
1234567890: Matched!
12345678901

0
0: Matched!
7
7: Matched!
8
17
17: Matched!
18

hello, world!
hello: first word
hello, perl world!
hello: first word

hello, world!
another hello, world!
another: first word (a)
a b
a: first word (a)

abcde fghij
abcde: first word (lower case vowel)
bcde fghij
cde fghij
de fghij
e fghij
e: first word (lower case vowel)

123467890
051234678
061234678
071234678
081234678
0512346789
0612346789
0612346789: French mobile
0712346789
0712346789: French mobile
0812346789

abcde fghij
abcde: first word (case vowel)
bcde fghij
cde fghij
de fghij
e fghij
e: first word (case vowel)
Abcde fghij
Abcde: first word (case vowel)
Bcde fghij
Cde fghij
De fghij
E fghij
E: first word (case vowel)

abcde
aabcd
aa: double letter
aaabcde
aa: double letter
abbcde
bb: double letter
abbbcde
bb: double letter
abccde
cc: double letter
abcdde
dd: double letter
abcdee
ee: double letter
aabcdee
aa: double letter

abcde
aabcd
aabbcd
bb: double letter(second)
aaabbcde
bb: double letter(second)
aaabbbcde
bb: double letter(second)
abbcde
abbcdde
dd: double letter(second)
abbcddde
dd: double letter(second)
abbbcde
abbbcdde
dd: double letter(second)
abbbcddde
dd: double letter(second)
abccde
abcdde
abcdee
aabcdee
ee: double letter(second)
$

0 コメント:

コメントを投稿