2017-03-21 1 views
-1

Ruby 2.4를 사용하고 있습니다. 정규 표현식에서, 숫자 뒤에 특정 문자 (또는 다른 숫자)가 오는 문자열 만 일치시키는 방법을 지정하지만 숫자 뒤에 나오는 다른 문자는 일치하지 않아야합니다. ":":문자열의 숫자 뒤에 오는 특정 문자를 일치시키는 방법

"1:9" 

을하지만, 이것은 안 :이 일치해야합니다, 내 특수 문자가있는 경우 즉,

"1:9-2" 

위의 문자열에,에 "의 인스턴스가 있기 때문에 - "는 숫자"9 "다음에옵니다. 나는 올바른 정규 표현식을했다고 생각하지만, 이것은 위의 두 경우에 true를 반환 : 그것은 나타납니다

2.4.0 :001 > ab = "1:3" 
=> "1:3" 
2.4.0 :002 > ab =~ /\d:\d/ 
=> 0 
2.4.0 :003 > ab = "1:3-4" 
=> "1:3-4" 
2.4.0 :004 > ab =~ /\d:\d/ 
=> 0 
+0

두 번째'\ d' ('/ \ d : \ d \ z /') 다음에 문자열의 끝이 올 것입니까? 또는'/ \ A \ d : \ d \ z /'와 같은 전체 문자열을 일치 시키시겠습니까? –

+1

게시하기 전에 질문을 교정하고 irb 프롬프트를 제거하십시오. –

+0

'숫자 이외의 다른 것은 일치하지 않아야합니다'만약 정규식과 일치하는 문자열 이외의 문자열을 제외 시키려면'^''$'앵커가 있어야합니다. 그렇지 않으면 문제를 더 잘 정의해야합니다. – sln

답변

0

당신은 회복과 한 자리에 있어야합니다 콜론으로 구분 된 숫자 문자열을 표시하는 문자열과 일치해야합니다.

당신은

세부 (여러 줄 테스트 문자열에 맞게)을 Rubular demo를 참조

/\A(?=\D*\d)[[:alnum:]]+(?::[[:alnum:]]+)*\z/ 

를 사용해야합니다 :

  • \A - 문자열 앵커의 시작을
  • (?=\D*\d) - 긍정적 인 모습 앞서 ((?=...)) 숫자보다 (\d) 0+ 후 문자 다른 디지트를 요구 (\D*)
  • [[:alnum:]]+ - 1 이상의 문자 또는 숫자
  • (?::[[:alnum:]]+)* - 0 개 이상의 서열 :
    • : - 콜론
    • [[:alnum:]]+-1 이상의 문자/숫자
  • \z - 문자열의 끝.
관련 문제