2014-02-14 3 views
0

문자열이있는 경우 어떻게 문자열에 "rldu"의 시퀀스가 ​​포함되어 있는지 확인할 수 있습니까? 나는 정말 루비에게 새로운 것이다, 이것이 바보 같은 질문이라면 유감스럽게 생각한다.문자열에 루비의 "udlr"시퀀스가 포함되어 있는지 확인하십시오.

오른쪽 - 왼쪽, d- 아래, 위쪽. 예를 들어

: 문자열을 가정

str = "udlv"  #should return false 
str = "lrd"  #should return true 
+4

나는 혼란 스럽다. 'rldu'의 어떤 순서로 무엇을 의미합니까? 당신의 예제는 문자열이'r','l','d','u' (임의의 순서로) 문자만으로 구성되어 있는지 확인하고 싶지 않다는 것을 나타내는 것처럼 보입니다. – Ajedi32

+2

두 번째 예제가 false를 반환 할 것으로 예상되지 않는 이유는 무엇입니까? ''u "'가 없습니다. – sawa

+3

SO 회원은 "어리석은 질문"이 무슨 뜻인지 쉽게 이해할 수 있습니다. 그들이 마음에 두는 것은 어리석게 말한 질문입니다. '... ridu "의 연속은 의미가 없다. 명확하고 정확하며 완벽해야합니다! 의견을 설명하기보다는 질문을 편집하십시오. –

답변

2

은 완전히 당신이 조건에서 사용할 수있는 정수 또는 전무를 반환합니다 순서

str =~ /^[rldu]+$/ 

에 주어진 네 개의 문자로 구성되어야한다. 당신은 부울을 원하는 경우에, !!과 트릭을 사용

!!str.match(/^[rldu]+$/) 
+0

Nik과 @ Ajedi32, 하루를 망쳐서 미안하지만 Ruby [스타일 가이드] (https://github.com/bbsosov/ruby-style-guide)는 "사용하지 마십시오!"라고 조언합니다. 너는 세련되고 싶지, 그렇지? –

+0

@CarySwoveland 어느 것입니까? 예를 들어 GitHub Ruby 스타일 가이드에는 다음 내용이 언급되어 있지 않습니다. https://github.com/styleguide/ruby. https://github.com/bbatsov/ruby-style-guide를 참고하면, 주어진 예제는 Ruby 코드에서'!!'의 일반적인 사용법을 보여주지 않기 때문에, 나는 그 조언을 기꺼이 무시할 것입니다. –

+0

mmm. 그것은 내 눈을 즐겁게하는 간결합니다 :) 대안은 무엇입니까 !! 속임수?제 3의 연산자는 내 의견으로는 더 낫지 않다. –

1

그 ' "rldu"의 순서'에 의해 가정 당신이 문자열이 구성되어 있는지 확인하려는 의미만을 r, l, d, u (모든 횟수, 순서에 상관없이)과 아무것도 좋은 오래된 정규 표현식은 잘 작동합니다 :

str =~ /^[udlr]*$/ 

당신이 엄격하게 그 부울 값 (참/거짓) 할 필요가 있다면, 당신은 두 개의 느낌표 (접두사가 붙지 않음)를 접두어로 붙일 수 있습니다 :

!!(str =~ /^[udlr]*$/) 

Ruby는 모든 값을 true 또는 false로 해석 할 수 있기 때문에 대부분 그렇게 할 필요가 없습니다.

String의 핵심 방법 here에 대한 설명서를 볼 수 있습니다. 그리고 here 정규 표현식에 대한 안내입니다.

p "udlv".count("^rlrd").zero? #=> false 
p "lrd".count("^rldu").zero? #=> true 

"^ rldu"수단 "당신이 문자열이 다음

!("udlv" =~ /[^udlr]/) # => false 
!("lrd" =~ /[^udlr]/) # => true 
2

rldu 이외의 모든 것 "

2

이 하나가 정규 표현식을 사용하지 않는udlr 이외의 아무것도 포함되어 있는지 여부를 확인하고 싶었다면

+0

코드는 예상 한 결과와 반대입니다. OP와 반대 순서로 나열했기 때문에 까다 롭습니다. 이는'zero? '를 사용하여 수정할 수 있습니다. – sawa

+0

@sawa 감사합니다. 그게 내가 가진 것인데, 나는 문자열의 순서가 바뀌었기 때문에 혼란스러워했다. – steenslag

관련 문제