in reply to conditional regex
Update: All '*' corrected to be '?' per follow ups.
but how to match s only if e is there, and match e only if s is there ?
I don't think anyone actually answered your question.
For proper abbreviations of 'yes', you can use m[^Y(?:E(?:S)?)?$]i.
That's a bit unweildy, but the repetitious nature means it is quite easy to generate a regex for any given word:
sub genAbbrevRegex{ my( $first, @rest ) = split '', shift; my $re = ''; $re = "(?:$_$re)?" for reverse @rest; return qr[^$first$re$]i; } print genAbbrevRegex( 'fred' );; (?i-xsm:^f(?:r(?:e(?:d)?)?)?$) $r = genAbbrevRegex( 'Yes' );; [0] Perl> print "$_: ", m[$r]? 'ok' : 'not ok' for qw[ YES YE Y yes ye + y YS ES S ys es s yees yess ];; YES: ok YE: ok Y: ok yes: ok ye: ok y: ok YS: not ok ES: not ok S: not ok ys: not ok es: not ok s: not ok yees: not ok yess: not ok
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: conditional regex
by JavaFan (Canon) on Aug 22, 2010 at 15:02 UTC | |
by BrowserUk (Patriarch) on Aug 22, 2010 at 15:18 UTC | |
|
Re^2: conditional regex
by AnomalousMonk (Archbishop) on Aug 22, 2010 at 15:06 UTC | |
by BrowserUk (Patriarch) on Aug 22, 2010 at 15:23 UTC | |
by AnomalousMonk (Archbishop) on Aug 23, 2010 at 00:48 UTC | |
by BrowserUk (Patriarch) on Aug 23, 2010 at 05:13 UTC | |
by AnomalousMonk (Archbishop) on Aug 23, 2010 at 11:51 UTC |