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

···

--
Posted via http://www.ruby-forum.com/.

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 Monday 11 January 2010, Chris Lervag wrote:

>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

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.

···

On Mon, Jan 11, 2010 at 1:39 PM, Chris Lervag <chris.lervag@gmail.com> wrote:

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:

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

···

2010/1/11 Stefano Crocco <stefano.crocco@alice.it>:

On Monday 11 January 2010, Chris Lervag wrote:

>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

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.

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

You're right.

Stefano

···

On Monday 11 January 2010, Robert Klemme wrote:

>> 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 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/

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).

···

On Jan 11, 5:57 am, Robert Klemme <shortcut...@googlemail.com> wrote:

> On Monday 11 January 2010, Chris Lervag 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/

> =A0/^[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/

ON the other hand, \Z saves you a .chomp
  

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

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

···

At 2010-01-11 07:57AM, "Robert Klemme" wrote:

2010/1/11 Stefano Crocco <stefano.crocco@alice.it>:

--
Glenn Jackman
    Write a wise saying and your name will live forever. -- Anonymous

Gavin Kistner 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.

···

--
Posted via http://www.ruby-forum.com/\.