Regex help

Hi
I want to test a string for three properties:

  1. It is exactly 9 characters long.
  2. Character number 5 is a comma (’,’).
  3. The other characters are either numbers 0-9 or letters a-f.

I have been able to do this by a combination of strings methods for 1)
and 2), and using a regex match on the string (stripped of the comma)
with the following code:
myString =~ /([^a-f0-9])/

If possible I would like to simplify this by using a more advanced regex
match to check all three properties at one time. If this is possible,
perhaps one of you regex wizards out there could show me how? :slight_smile:

Best regards,
Chris

On Monday 11 January 2010, Chris L. wrote:

|
|If possible I would like to simplify this by using a more advanced regex
|match to check all three properties at one time. If this is possible,
|perhaps one of you regex wizards out there could show me how? :slight_smile:
|
|Best regards,
|Chris

You could do this with a regexp which matches the following:

  • the beginning of the string
  • four characters of type a-f or digits
  • a comma
  • four characters of type a-f or digits
  • the end of the string

The regexp is:
/^[a-f\d]{4},[a-f\d]{4}$/

Note that your string can contain newlines, you must replace ^ and $
with \A
and \Z respectively.

I hope this helps

Stefano

On Mon, Jan 11, 2010 at 1:39 PM, Chris L. [email protected]
wrote:

If possible I would like to simplify this by using a more advanced regex
match to check all three properties at one time. If this is possible,
perhaps one of you regex wizards out there could show me how? :slight_smile:

irb(main):006:0> re = /\A[a-f0-9]{4},[a-f0-9]{4}\z/
=> /\A[a-f0-9]{4},[a-f0-9]{4}\z/
irb(main):007:0> “abcd,4f2ddf” =~ re
=> nil
irb(main):008:0> “abcd,4f32” =~ re
=> 0

Hope this helps,

Jesus.

2010/1/11 Stefano C. [email protected]:

|myString =~ /([^a-f0-9])/

  • four characters of type a-f or digits
  • a comma
  • four characters of type a-f or digits
  • the end of the string

The regexp is:
/^[a-f\d]{4},[a-f\d]{4}$/

Note that your string can contain newlines, you must replace ^ and $ with \A
and \Z respectively.

I believe this should rather be \z because \Z allows for a follwing
newline. So that would be

/\A[a-f\d]{4},[a-f\d]{4}\z/

see サービス終了のお知らせ

Kind regards

robert

On Monday 11 January 2010, Robert K. wrote:

|> Note that your string can contain newlines, you must replace ^ and $
|> with \A and \Z respectively.
|
|I believe this should rather be \z because \Z allows for a follwing
|newline. So that would be
|
|/\A[a-f\d]{4},[a-f\d]{4}\z/

You’re right.

Stefano

On Jan 11, 5:57 am, Robert K. [email protected] wrote:

On Monday 11 January 2010, Chris L. wrote:

|I want to test a string for three properties:
|1) It is exactly 9 characters long.
|2) Character number 5 is a comma (‘,’).
|3) The other characters are either numbers 0-9 or letters a-f.
/\A[a-f\d]{4},[a-f\d]{4}\z/

Slightly more terse:
/\A\h{4},\h{4}\z/
…where \h is a hexadecimal character [0-9a-fA-F] (assuming upper-
case a-f is fine).

Gavin K. wrote:

Slightly more terse:
/\A\h{4},\h{4}\z/
…where \h is a hexadecimal character [0-9a-fA-F] (assuming upper-
case a-f is fine).

Alright, thanks guys for excellent insight and help! I especially like
this last suggestion which is both compact and easy to comprehend.

At 2010-01-11 07:57AM, “Robert K.” wrote:

/\A[a-f\d]{4},[a-f\d]{4}\z/
ON the other hand, \Z saves you a .chomp

see サービス終了のお知らせ

I’d love to see that kind of documentation in the core Ruby docs.