DB<130> @a = ("abc","aab","abb","aba") DB<131> for (@a) { say "$_ : $1,$2" if /^(.)(?!.*\1)(.)(?!.*\2)/ } abc : a,b DB<132>
There are advanced features for repeating patterns where you don't need to know the length in advance. (see perlretut )
But I'd rather prefer a simple split and %seen-hash solution, which is far easier to maintain.
Wait ... please try (and test!!!) this solution with relative backrefrences:
DB<142> @a = ("abc","aab","abb", "aba","abcd","abca" ) DB<143> for (@a) { say "$_" if /^ ( (.) (?!.*\g-1) )+ $/x } abc abcd DB<144>
still this regex solution will have O(n^2), while a %seen hash solution can do in O(n)
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
In reply to Re: Nonrepeating characters in an RE (updated)
by LanX
in thread Nonrepeating characters in an RE
by BernieC
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |