Hi
I want to test a string for three properties:
- It is exactly 9 characters long.
- Character number 5 is a comma (’,’).
- 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?
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?
|
|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?
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.