2008-09-26 4 views
6

저는 "The Rails Way"에서 읽고있는 것을 토대로 Ruby에서 Regex를 배우려고합니다. 그러나,이 간단한 예조차도 저를 곤란하게합니다. 이 오타인지 아닌지 내가 ...Ruby Regex 문제 text.gsub [^ W-], '')가 실패했습니다.

text.gsub 말할 수 없습니다 (/ \ S /, "-"). GSUB ([^은 W- \], '')

을 .downcase

이것은 모든 공백을 -로 바꾸는 대신 공백 문자가 아닌 숫자로 시작하는 문자열을 대시로 바꾸고 그 문자를 ''로 바꿉니다. 하지만 irb를 사용하면^"구문 오류, 예기치 못한 '^', '예상' '"오류가 발생하고 W가 다시 꺼내집니다.

나는 꽤 혼란 스럽습니다. .

답변

9
>> text = "I love spaces" 
=> "I love spaces" 
>> text.gsub(/\s/, "-").gsub(/[^\W-]/, '').downcase 
=> "--" 

//

해야한다 \ W는 "단어가 아님"을 의미합니다. \ w는 "단어"를 의미합니다.

,

가 // regexp와 객체

/[^\W-]/.class => 정규 표현식을 생성

2

슬래시를 잊어 버렸습니다. 이

>> text.gsub(/\s/, "-").gsub(/([^\W-])/, '\1').downcase 
=> "i-love-spaces" 

:-) 좀 더 의미가 있습니다 그리고이

>> text.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase 
=> "i-love-spaces" 

을 무엇을 의미하는지 아마하지만 그것은 누락 /[^\W-]/

1

슬래시는 말을하고 있는지 그들 사이의 일이 따옴표가 그들 사이에있는 것이 문자열이라는 것과 같이 정규식입니다.

2

글쎄, .gsub (/ [^ \ W -] /, '')는 단어가 아니거나 아무것도 대체하지 않는다고 말합니다. Add this to your bookmarks :

당신은 아마

>> text.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase 
=> "i-love-spaces" 

소문자 \ w (\ W 단지 반대)

+0

아름다운. 그것은 완벽하게 작동했습니다. 감사. – scubabbl

3

단계 1을 원한다. 나는 정규 표현식에를 볼 필요가 때마다 내 첫 정지

2 단계의 :의이 코드

text.gsub(/\s/, "-") 

당신은 gsub 함수를 호출하고 2 개 매개 변수를 제공하고 있습니다 통해 살펴 보겠습니다.
첫 번째 매개 변수는 루비는 "(정규 표현식에은"// 특별한처럼) \s 포함 된 새 정규 표현식을 만들 수 "에 대한 인 /\s/이다.
두 번째 매개 변수는 문자열 "-"입니다.

이 따라서 대체합니다 모든 공백 문자는 하이픈으로 표시됩니다.

.gsub([^\W-], '').downcase 

다음으로 gsub를 호출하여 매개 변수 2 개를 전달합니다. 첫 번째 매개 변수는 [^\W-]입니다. 슬래시로 인용하지 않았으므로 루비는 문자 그대로 코드를 실행 해 봅니다. []은 배열을 만든 다음 배열에 ^\W-을 넣으려고합니다. 유효하지 않은 코드이므로 끊어집니다.
/[^\W-]/으로 변경하면 유효한 정규식이됩니다.

정규식을 보면 []은 '이 그룹의 모든 문자와 일치합니다. 그룹에는 \W (단어가 아닌 문자를 의미 함) 및 -이 포함되어 있으므로 정규식은 단어가 아닌 문자 또는 하이픈과 일치해야합니다. 당신이 GSUB을 전달하는 두 번째 문제는 빈 문자열로

, 그것은 바로 변환

.downcase 

을 (하여 그들을 제거) 빈 문자열로 모든 비 단어 문자와 하이픈을 교체 결국합니다 문자열을 소문자로 변환합니다.

희망 사항 :-)