in reply to Regex AND
I've written a tool (in Perl) for transforming data on enterprise applications (modules & relations) to an input format for graphic display (nodes & arcs).
The node names have the general format:
[A-Z]{2}\d{5}[A-Z]?
Part of the tool allows you to enter a regex (in a textbox), the program compiles the regex and uses it as a filter to parse the data (eg. discard data line if node-name !~ node-filter).
For instance you can specify the following regex:
to indicate that you're only interested in source modules matching the following name conventions (which is an example of an actual application domain) :(CX36(5|6))|(JA30[0-2])|(JA3(([2-8]\d)|(9[0-4])))|(JA5.*)|(JA6((0\d)|( +1[0-3])))|(JA64[7-9])|(JA687.*)|(JA74[0-3])|(JB5.*)|(JY(((1|2)\d\d)|( +3[0-3]\d)))|(JY[3-9][5-9]\d)|(JZ51(3|4)00.*)
Now it's also often relevant to filter on nodes NOT matching a given application domain (in effect the complement of the domain definition), - for the above example all modules which pass a filter combining the following regex'es:CX365-CX366 JA300-JA302 JA320-JA394 JA5* JA600-JA613 JA647-JA649 JA687* JA740-JA743 JB5* JY100-JY339 JY350-JY999 JZ51300* JZ51400*
Thus the need to combine (AND) the "negated" rexeg'es into one big regx and pass that to the parsing/filtering program.^(?!CX36(5|6)) ^(?!JA30[0-2]) ^(?!JA3(([2-8]\d)|(9[0-4]))) ^(?!JA5.*) ^(?!(JA6((0\d)|(1[0-3])))) ^(?!JA64[7-9]) ^(?!JA687.*) ^(?!JA74[0-3]) ^(?!JB5.*) ^(?!(JY(((1|2)\d\d)|(3[0-3]\d)))) ^(?!JY[3-9][5-9]\d) ^(?!JZ51(3|4)00.*)
Allan
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Regex AND
by melora (Scribe) on Dec 02, 2004 at 16:23 UTC | |
by ady (Deacon) on Dec 02, 2004 at 17:04 UTC | |
by tmoertel (Chaplain) on Dec 03, 2004 at 18:14 UTC |