On 9/20/07, Matt McCredie <mccredie@gmail.com> wrote:

> Any common knowledge IP matching RE?

I don't know if there is any common knowledge RE, but I came up with
the following:

r"((1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){3}(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)")

Thank you. I will use that!

I generally discourage people from using REs. I think the folowing is
much easier to read:

Well, I need the regex to be used withing a parser (yeanpypa or ZestyParser),  so I need it to be a regex to be matched against, and not a piece  of code .
I could probably use a more simplistic re that does not check numeric validity, and do that later, but your re would do both matching and validation in one step.

Dan

def isip(x):
    octs = x.split(".")
    if len(octs) != 4:
        return False
    for oct in octs:
        if len(oct) > 1 and oct[0] == "0":
            return False
        try:
            if not 0 <= int(oct) < 256:
                return False
        except ValueError:
            return False
    return True

Both solutions seem to work, though I used a small set of test cases.
Others may have better suggestions.

Matt