Hi,
Hopefully this does the trick for you, using negative lookahead to make sure each character doesn't repeat before the comma (or end of string):
my @tst = qw( A,G AG,CT TC,CA GAT,CGA CGAT,TG ,G
ACGT X,A AA,G AC,GGC ATGA,TGG ATCXG,AAC
);
for (@tst) {
my $side = qr/(?:([ACGT])(?![^,]*\g{-1}))+/;
print $_ . (/^$side,$side$/ ? ' good' : ' bad') . $/;
}
Prints:
A,G good
AG,CT good
TC,CA good
GAT,CGA good
CGAT,TG good
,G bad
ACGT bad
X,A bad
AA,G bad
AC,GGC bad
ATGA,TGG bad
ATCXG,AAC bad
Oops, more test coverage showed an issue. Needed to use relative group instead of "\1" as originally posted which had a problem with "AC,AC". Fixed.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.