문제

안녕하세요 저는 Ruby와 정규 표현을 처음 사용합니다. "02/02/1980"=> "2/2/1980"과 같은 형식의 날짜로 월 또는 일에서 0을 제거하기 위해 정규 표현식을 사용하려고합니다.

def m_d_y
  strftime('%m/%d/%Y').gsub(/0?(\d{1})\/0?(\d{1})\//, $1 + "/" + $2 + "/" )
end

이 정규 표현에 어떤 문제가 있습니까?

감사.

도움이 되었습니까?

해결책

슬래시로 끝나는 부분에서 0을 제거 할 수 있습니다.

나를 위해 일합니다

require "date"

class Date
    def m_d_y
      strftime('%m/%d/%Y').gsub(/0(\d)\//, "\\1/")
    end
end

puts Date.civil(1980, 1, 1).m_d_y
puts Date.civil(1980, 10, 1).m_d_y
puts Date.civil(1980, 1, 10).m_d_y
puts Date.civil(1908, 1, 1).m_d_y
puts Date.civil(1908, 10, 1).m_d_y
puts Date.civil(1908, 1, 10).m_d_y

출력

1/1/1980
10/1/1980
1/10/1980
1/1/1908
10/1/1908
1/10/1908

다른 팁

"02/02/1980".gsub(/\b0/, '') #=> "2/2/1980"

\b 따라서 단어 경계의 0 폭이 마커이므로 \b0 0 이전에는 숫자를 가질 수 없습니다.

이 작업을 수행 할 수있을 때 왜 Regex를 귀찮게합니까?

require "date"

class Date
    def m_d_y
      [mon, mday, year].join("/")
    end
end

노력하다 /(?<!\d)0(\d)/

"02/02/1980".gsub(/(?<!\d)0(\d)/,$1)
=> "2/2/1980"

문제는 유효한 날짜와 일치하지 않으므로 교체가 유효한 문자열을 망칠 수 있다는 것입니다. 고치다:

리그 : (^|(?<=/))0

바꿔 놓음: ''

당신은 루비가 구문 오류를 던지고 있다고 말하면, regexp에 도달하기 전에 문제가 있습니다. 아마 당신이 전화하지 않기 때문일 것입니다 strftime 무엇이든. 노력하다:

def m_d_y
  t = Time.now
  t.strftime('%m/%d/%Y').gsub(/0?(\d{1})\/0?(\d{1})\//, $1 + "/" + $2 + "/" )
end

그런 다음 시간을 실시간으로 교체 한 다음 Regexp를 디버깅하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top