Perl (111 110 122 karakter)
use Regexp::Assemble;@ARGV=shift;my$r=new Regexp::Assemble;chomp,add$r "^\Q$_\E\$"while<>;$_=as_string$r;s/\(\?:/(/g;print
Ini menggunakan modul CPAN yang dipanggil Regexp::Assemble
untuk mengoptimalkan ekspresi reguler. Karena apa bahasa yang lebih baik untuk ekspresi reguler daripada Perl.
Juga, versi yang mudah dibaca, hanya untuk bersenang-senang (dibuat dengan bantuan -MO=Deparse
).
use Regexp::Assemble;
my $r = Regexp::Assemble->new;
while (<>) {
chomp($_);
$r->add("^\Q$_\E\$");
}
$_ = $r->as_string;
# Replace wasteful (?:, even if it's technically correct.
s/\(\?:/(/g;
print $_;
Output sampel (saya lakukan setelah CTRL-D item4
).
$ perl assemble.pl
item1
atem2
item3
item4
^(item[134]|atem2)$
Juga, sebagai bonus, saya menulis regex untuk setiap kata dalam pertanyaan.
^(a((ttemp)?t|llowed\.|rbitrary)?|\/\^item1\|atem2\|item3\|item4\$\/|s(ho(rt,|uld)|imilar)|p((air|lay)s|rogram)|(Writ|mak|Th)e|l(ists\.|east)|o([fr]|utputs)|t(h(at|e)|o)|(jus|no)t|regex|golf|with|is)$
Juga, daftar presiden (262 byte).
^(((J(effer|ack|ohn)s|W(ashingt|ils)|Nix)o|Van Bure|Lincol)n|C(l(eveland|inton)|oolidge|arter)|H(a(r(rison|ding)|yes)|oover)|M(cKinley|adison|onroe)|T(a(ylor|ft)|ruman)|R(oosevelt|eagan)|G(arfield|rant)|Bu(chanan|sh)|P(ierce|olk)|Eisenhower|Kennedy|Adams|Obama)$
/^item1|atem2|item3|item4$/
mungkin memiliki prioritas yang tidak disengaja (string harus dimulai denganitem1
, mengandungatem2
, berisiitem3
, atau diakhiri denganitem4
).