Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Match any substring from the beginning of a word

Tags:

regex

perl

For example, with a line like previous, I want the pattern to match the lines p, pr, pre, prev, etc., all the way up to previous. I do NOT want it to match lines like prevalent or previse. Is there a pattern to accomplish this aside from the obvious (^(p|pr|pre|prev|...|previous)$)?

Note: I do not need to capture it like in the above pattern, and I'm using Perl's regular expression flavor (in Perl).

like image 899
Brandon Coffman Avatar asked Dec 22 '22 11:12

Brandon Coffman


2 Answers

/^p(r(e(v(i(o(u(s)?)?)?)?)?)?)?$/

And just to double check that it works:

for (qw/p pr pre previous prevalent previse/) {
    $result = (/^p(r(e(v(i(o(u(s)?)?)?)?)?)?)?$/? "yes" : "no");
    print "Checking $_: $result\n";
}

Produces:

Checking p: yes
Checking pr: yes
Checking pre: yes
Checking previous: yes
Checking prevalent: no
Checking previse: no
like image 147
Adam Batkin Avatar answered Dec 30 '22 15:12

Adam Batkin


I don't think regex is the best (or most readable) way to do this:

$str = "previous";
$input = "prev";
$length = length($input);

$strcheck = substr($str, 0, $length);
$incheck = substr($input, 0, $length);

if ($strcheck =~ $incheck && $length != 0) {
    // do something with $input
}
like image 21
NorthGuard Avatar answered Dec 30 '22 16:12

NorthGuard