#!/usr/bin/perl use warnings; use strict; while (<DATA>) { if (my ($alnum, $constrained) = /^foo # "foo" _ # followed by "underscore" (?:bar|test) # followed by "bar|test" (bar or test) _ # followed by "underscore" ((?:\w+\.)+?) # followed by alhpnum string with # dot at end (like foo10.1.1.1) \1? # followed by one or zero occurences # of same alhpnum string (like # foo10.1.1.1) followed by dot (\w{1,10}) # followed by 1-10 characters, # containing at least one digit and # one letter and underscore (e.g. # TEST_test, TEST_test2, # TEST1_test2) \.txt$ # ends with .txt /x) { print "<$alnum | $constrained> $. ok\n" if 3 == grep $constrained =~ $_, qr/_/, qr/\d/, qr/[[:alpha:]]/; } } __DATA__ foo_bar_foo10.1.1.1.TEST.txt foo_test_foo10.1.1.1.foo10.1.1.1.TEST_test.txt foo_test_foo10.1.1.1.foo10.1.1.1.txt foo_test_foo10.1.1.1.foo10.1.1.1.TEST-1.txt foo_test_foo10.1.1.1.foo10.1.1.1.TEST_1.txt
Note that I changed the quantifier in the first capturing group to frugal to avoid matching both occurrences of $alnum as one without repetition. Nevertheless, in the third case, the whole substring foo10.1.1.1.foo10.1.1. corresponds to $alnum, it's not repeated, and $constrained is just 1 .
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
In reply to Re^3: Regex lookahead, lookbehind
by choroba
in thread Regex lookahead, lookbehind
by rahulme81
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |