KarthikK has asked for the wisdom of the Perl Monks concerning the following question:

I need help in regular expressions. I have a field where user could type in a config spec/some free text/Links (Http or FTP or file share)
i have to perform a check if the config spec is valid (as per rule specified)

- User should not specify config spec with /main/latest or \main\latest

- User should not specify config spec with version numbers with @@ ex: foo.c@@\main\4

- User could specify /main/latest or \main\latest or @@\main only if it has the following text:
element -dir \vob\folder@@\main\1
element -directory \vob\folder@@\main\1
element -directory \vob\folder\main\1
element -dir \vob\folder\main\1

- Below are some valid rules
element * label
element -file filename LABEL
if the user enter
element -file filename

without LABEL i should trap these. Here LABLES are some text which do not contain (/main/ or \main\ or /main/latest or \main\latest or @@)

I want to have these patterns in a place something like the ini file so that it could be configured.

Is there a way to get a pattern for these scenarois?

thanks a lot in advance

Regards
KK

Replies are listed 'Best First'.
Re: Help with regular expressions
by moritz (Cardinal) on Aug 29, 2008 at 11:43 UTC
    Your description and examples aren't enough to to deduce a regex from them. You should try to define precisely what you want to allow or not. This could look like that:
    A valid ref spec is a string that starts with the literal 'element ', and is followed by * Either a star '*' OR by m/-dir(ectory)? \S+/ OR by m/-file \S+/ * then by a label A label is ...

    Once you know what you actually want to match, you can translate that into a regex quite easily:

    my $re = qr{ element \s ( \* | -dir(ectory)? \S+ | -file \S+ ) # Label: \w+ }x;

    You should also handle special cases special, ie don't try to munge them into your regex, but rather make an extra path to check for special cases.

      thx for your suggestions. Perhaps i will try to explain more. Basically since this is a free text field user would typein Configspec or some notes. the only way i could find that the text is a config spec is by finiding the text "element". But there are riles which i had mentioned in my post. Ofcourse i dont want to validate these lables with ClearCase. This is lets say a soft verification of the config spec. I hope i am clear
Re: Help with regular expressions
by apl (Monsignor) on Aug 29, 2008 at 11:41 UTC