Golgappa.net | Golgappa.org | BagIndia.net | BodyIndia.Com | CabIndia.net | CarsBikes.net | CarsBikes.org | CashIndia.net | ConsumerIndia.net | CookingIndia.net | DataIndia.net | DealIndia.net | EmailIndia.net | FirstTablet.com | FirstTourist.com | ForsaleIndia.net | IndiaBody.Com | IndiaCab.net | IndiaCash.net | IndiaModel.net | KidForum.net | OfficeIndia.net | PaysIndia.com | RestaurantIndia.net | RestaurantsIndia.net | SaleForum.net | SellForum.net | SoldIndia.com | StarIndia.net | TomatoCab.com | TomatoCabs.com | TownIndia.com
Interested to Buy Any Domain ? << Click Here >> for more details...

Write a simple regular expression to match an IP address,
e-mail address, city-state-zipcode combination.

Answer Posted / santosh

The question is not properly framed. A regex is specific to
a language to some extent. Lets frame it more properly and
create some test cases:
1. Writing regex for Perl to identify an IP address.
2. IP address must be a "true" IP address.
3. It must not match anything more than an IP addresses.
4. Must pass the following tests:
a)0.0.0.0: Pass: This is a valid class A address, though a
reserved address. You may not see it often but nevertheless
it is a valid address. See
http://www.lincoln.edu/math/rmyrick/ComputerNetworks/InetRef
erence/26.htm
b)1.1.1.1: Pass
c)255.255.255.255:Pass
d)1.1.1.11111:Fail
e)256.1.1.1:Fail
f)256.256.256.256:Fail
g)-1.-1.-1.-1: Fail
h).... (four dots without any digits in between)

Another test can be presence of extra zeros, which can be
fine or not fine depending upon the OS. For example
01.01.01.01 should or should not be accepted? But we will
ignore it for the time being in our analysis.

Here is an analysis of the solutions given above as well as
my additional solutions:
1. /([0-255])(\.)$1\1$1\1$1/; : This works for egrep and
possibly vi and other *nix tools such as emacs. This does
*not* work for Perl because [0-255] will match
digits '0','1', '2' and '5' only. It will not match 63.

2. /((\d{1,3})(\.)){3}\d{1,3}/: Written for Perl as
obviously {} syntax is not available for many other
scripting languages. This does not check the semantics of
IP addresses. Fails tests d, e, f above.

3. (/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/ && $1 <
255 && $2 < 255 && $3 < 255 && $4 < 255 ): Is almost
correct. Only fails d in above tests. However, it uses
logical expressions and is not a pure regular expression.
Checking for word boundaries will correct it. For example,
(/\b(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\b/ && $1 <
255 && $2 < 255 && $3 < 255 && $4 < 255 ) will pass d
above.

4. r'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b': Passes all the
tests. This is the best answer.

5. /^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]
\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25
[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/: Fails
test a. But only because it was meant to eliminate 0.0.0.0.
Otherwise this is okay, though a little verbose. #4 above
can be modified slightly to take care of 0.0.0.0 case and
is less verbose.

Hope this helps.

Regards,
Santosh

Is This Answer Correct ?    7 Yes 1 No



Post New Answer       View All Answers


Please Help Members By Posting Answers For Below Questions

What are hashes?

888


What is 'commit' command in perl?

1037


What is the use of -n and -p options?

981


List the operator used in Perl?

919


Explain goto label, goto name, and goto expr?

880


Can you add two arrays together?

864


Why do you use Perl?

917


What is the difference between perl list and perl array?

813


Explain the default scope of variables in perl?

864


Why -w argument is used with perl programs?

914


Explain what is lvalue?

968


Hi, I am a accountant. I am preparing a balance sheet but because of staff shortage and time pressures I cant complete it on time. There is lot of common data with last years which I need not retype and I can manage by editing last year’s balance sheet ? Is their any software on net where I can do this easily??

2093


Explain grooving and shortening of arrays and splicing of arrays?

842


How can you create anonymous subroutines?

865


what is the function of Return Value?

996