howto simplfy this regex if ($string =~/^$match | $match | $match$/g){

howto simplfy this regex if ($string =~/^$match | $match | $match$/g){

Post by itshardtog » Mon, 05 May 2008 14:19:50



Hi,
How do I simplify the regex below so that it matches only the number 1, henceforth it should return false if I match $string with $match.

use strict;
use warnings;

my $string = "10 11 12 13 40";
my $match = 1;

if ($string =~/^$match | $match | $match$/g){
print "match";
}else{
print "unmatch";
};
 
 
 

howto simplfy this regex if ($string =~/^$match | $match | $match$/g){

Post by chas.owen » Mon, 05 May 2008 14:29:02


I may be missing something, but I believe you will get the same
results with just

if ($string =~ /$match/) {
print "match\n";
} else {
print "no match\n";
}

However, if you are going to include a string in a regex you should
probably use the \Q and \E modifiers* to prevent any metacharacters
(., *, ?, etc.) in the string from being interpreted by the regex
(unless, of course, that is what you want):

if ($string =~ /\Q$match\E/) {
print "match\n";
} else {
print "no match\n";
}

If you are going to use the same string in a regex multiple times you
are better off compiling it as a regex with the qr// operator** first:

my $match = qr/1/;

* http://www.yqcomputer.com/ #Regular-Expressions
** http://www.yqcomputer.com/ #qr%2fSTRING%2fmsixpo

--
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.

 
 
 

howto simplfy this regex if ($string =~/^$match | $match | $match$/g){

Post by norepl » Mon, 05 May 2008 14:45:22


Do you possibly mean something like:

my $match = qr(\b1\b);
if ( $string =~ /$match/ ) {

which would be true for the string

my $string = "10 11 1 13 40";

but not for your original string.

--
Gunnar Hjalmarsson
Email: http://www.yqcomputer.com/
 
 
 

howto simplfy this regex if ($string =~/^$match | $match | $match$/g){

Post by chas.owen » Mon, 05 May 2008 14:47:28


snip
snip
snip

Ah, I was missing something, the spaces. This is much better than my answer.

--
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.
 
 
 

howto simplfy this regex if ($string =~/^$match | $match | $match$/g){

Post by norepl » Mon, 05 May 2008 15:05:48


I think this is even safer:

my $match = qr"(?:^|\s)1(?:\s|$)";

--
Gunnar Hjalmarsson
Email: http://www.yqcomputer.com/