Re: Re PATTERN.E (to David)

new topic     » goto parent     » topic index » view thread      » older message » newer message

"Zaphod Beeblebrox" wrote:

> v1.0 (c) Copyright Language Project, 2000

The (c) brings up a problem: the paren characters are reserved. I'll post a
fix to Robert this evening.=. The '/' should be used to specify a literal
value for a special character. For example:

   /((C|c)/)(.*)

Broken down into parts: The pattern:

   /(

specifies the literal '('; the pattern:

   (C|c)

specifies an upper or lower case 'c', and the pattern:

   /)

specifies a literal ')'. The pattern:

   (.*)

matches the rest of the pattern until the end of the line, and groups the
result into the second argument returned from the pattern matcher.

Matching the version is a bit problematic, in that it can get a lot of false
matches. The 'version' text can possibly look like any of the following:

   v
   v.
   ver
   ver.
   version

You can specify these with something like this:

   (version|ver.|ver|v.|v)

Note that the order of matching is important here - you want to check for
'version' before you check for 'ver', or you will end up with 'sion' as part
of the matched string. You can move the '.' out of the pattern with:

   (version|ver|v)[.]?

Also note that the pattern is case sensitive, so Ver and VERSION won't
match. So you need to add these, or set the string to lower case before
performing the match:

   (VERSION|Version|version|VER|Ver|V|v)[.]?

Now you need to specify the version string. This can include any number of
alphanumeric and '.' characters:

   [a-zA-Z0-9.]*

it might be easier to specify that it's terminated by a non-space:

   [^ ]*

There is possibly a space between the version and the number:

   (VERSION|Version|version|VER|Ver|ver|V|v)[.]?[ ]?[^ ]*

Unfortunately, this matches against the string:

   "this is very silly"

So you may decide that the keys need to be tightened up. If they wrote
something like:

   version 1.0 pre-alpha

then the 'pre-alpha' will not be matched, because it's delimited by a space.


> If I just want the numbers

Use parens to indicate the portion that you care about:

   (VERSION|Version|version|VER|Ver|ver|V|v)[.]?[ ]?([^ ]*)

The second set of parens specifies the version number.

> If I want the  v|V and the numbers...

You can nest parens. The first set of parens contains the value:

   ((VERSION|Version|version|VER|Ver|ver|V|v)[.]?[ ]?[^ ]*)

> If I want the whole shebang...

If the pattern returned false, you know you didn't get a match.

Hope this helps!

-- David Cuny

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu