문제
안녕하세요 저는 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를 디버깅하십시오.
제휴하지 않습니다 StackOverflow