2011-11-18 5 views
0

은 가정하자 내가 문자열 변수를 확인하십시오문자열 형식은 다음과 같이

s1="10$" 
s2="10$ I am a student" 
s3="10$Good" 
s4="10$  Nice weekend!" 

위, s2s4 공백 (들) 10$ 후를 참조한다.

일반적으로, 나는 문자열 10$로를 시작하고10$공백 (들)가 있는지 확인하는 방법을 가지고 싶습니다. 예를 들어, 규칙은 위의 경우에 s2s4을 찾아야합니다. 문자열이 '10 $ '로 시작하고 뒤에 공백이 있는지 확인하는 규칙을 정의하는 방법은 무엇입니까?

s2.RULE?은 true 또는 false를 반환해야 일치하는 문자열인지 알 수 있습니다.

---------- 갱신 -------------------

10#가 사용되고있는 경우도 해결책을 알려주세요 10$

+0

숙제 같은 냄새 : –

답변

4

Regular Expressions을 사용하면됩니다 (Ruby에는 Perl 스타일의 정규식이 있습니다).

# For ease of demonstration, I've moved your strings into an array 
strings = [ 
    "10$", 
    "10$ I am a student", 
    "10$Good", 
    "10$  Nice weekend!" 
] 

p strings.find_all { |s| s =~ /\A10\$[ \t]+/ } 

정규 표현식은 다음과 같이 분해 :

  • 시작과 끝의 / 사이의 모든 정규 표현식
  • \A의 일부인의 시작과 일치하는지 루비에게 문자열
  • 10은 일치하는 것이므로
  • \$ 일치하는 의미입니다. a $ 그대로 사용하십시오. $에는 정규 표현식에서 특별한 의미가 있기 때문에 이스케이프해야합니다.
  • [ \t]+ 수단 "일치하는 적어도 하나의 빈 및/또는 탭"

그래서이 정규 표현식은 "경기가 10$로 시작하는 모든 문자열이 적어도 하나 개의 공백 또는 탭 문자 다음에"말했다. =~을 사용하면이 표현식에 대해 Ruby에서 문자열을 테스트 할 수 있습니다. =~은 nil이 아닌 값을 반환하며, if과 같은 조건에 사용되면 true로 평가됩니다.

: Asmageddon's 제안에 따라 일치하는 공백이 업데이트되었습니다.

/^10[\$#] +/ 
+1

\ s도 줄 바꿈과 일치하지만 대신 [\ t \]를 사용합니다. – Llamageddon

+0

문자열에 '$'대신 '#'이 포함되어 있으면 \ #을 사용하여 이스케이프 처리해야합니까, 아니요? – Mellon

+0

아니요, '#'은 특수 문자가 아닙니다. [Ruby QuickRef] (http://www.zenspider.com/Languages/Ruby/QuickRef.html#12)에는주의해야 할 모든 특수 문자 목록이 있습니다. – Markus

1

의이 작품 :

"10$ " =~ /^10\$ +/ 

을 리턴하거나 nilfalse 또는 true0. Ruby 규칙 덕분에 직접 사용할 수 있습니다.

1

를 사용하여 이와 같은 정규 표현식 : 당신은 일치에 = ~ 사용하는 경우

/10\$\s+/ 

편집

= ~ 연산자는 문자 위치를 반환합니다 의 문자열에서

그래서 일치를 나타내는 0을 반환 할 수 있습니다. nil의 반환 만 일치하는 것을 의미하지 않습니다.

ruby에 대한 정규 표현식 자습서에서 http://www.regular-expressions.info/ruby.html을 참조하십시오.

+0

'10 \ $ +'는 $ 10 $ 10 $ 10과 일치 할 수 있습니다. +1 어쨌든 +1 – apneadiving

+0

참 - 그것을 제거했습니다. – Thilo

+0

문자열에 '$'대신 '#'이 포함되어 있으면 \ #을 사용하여 이스케이프 처리해야합니까, 아니요? – Mellon

0

당신이 다음이 정규 표현식을 시도 $#와 경우에 진행하려면

. 숙제 문제를 "숙제"로 표시하고 문제를 해결하기 위해 시도한 것을 보여주기 위해 작성한 소스 코드를 포함시키는 것이 좋습니다.