2011-06-30 11 views

Odpowiedz

9

\h jest rubin kod regex dla szesnastkowym. (...) przechwytuje submatch i \1 pozwala odwołać się do pierwszego submatch:

/#(\h\h)\1\1/ 

w IRB:

>> %w{ #000000 #ababab #ffffff #ccddcC#afafa0 }.map { |s| s =~ /#(\h\h)\1\1/ } 
=> [0, 0, 0, nil, nil]               
+1

Czy '\ h' nowy w 1.9? Działa lokalnie (z 1.9.2), ale nie na Rubular (z 1.8.7). – Jeremy

3

Spróbuj tego:

^#([0-9a-fA-F][0-9a-fA-F]?)\1\1$ 

który będzie pasował:

#000000 
#aaa 
#ababab 
#ffffff 

jak widać na Rubular: http://rubular.com/r/hDPrvr1dvu

To albo powtarza pojedynczy znak 3 razy (pasujących #AAA) lub powtórzenie podwójnym Char 3 razy (pasująca #666666 i #121212).

+0

Chciałbym awansować, z wyjątkiem tego, że wyrażenie regularne nie ogranicza się do liczb szesnastkowych. – Jeremy

+0

@Jeremy, dobry telefon! :) –

+0

Możesz użyć '[[: xdigit:]]' zamiast '[0-9a-fA-F]', jeśli chcesz. –

Powiązane problemy