>  기사  >  Java  >  Java는 정규식을 사용하여 시간 및 날짜 판단 작업 분석을 구현합니다.

Java는 정규식을 사용하여 시간 및 날짜 판단 작업 분석을 구현합니다.

黄舟
黄舟원래의
2017-10-12 10:27:051863검색

이 글에서는 정규식을 기반으로 하는 Java의 일반적인 날짜 및 시간 판단 연산을 주로 소개합니다. 정규식에서 흔히 사용되는 메타 문자의 의미를 간략하게 설명하고 정규식을 기반으로 하는 Java의 일반적인 날짜 및 시간 형식에 대한 판단 연산 기술을 예제 형식으로 분석합니다. . 도움이 필요한 친구가 참고할 수 있습니다

이 글에서는 Java 정규식을 기반으로 하는 일반적인 시간 및 날짜 판단 연산을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

최근에 해당 작업을 수행하기 위해 사용자가 입력한 시간과 날짜 유형을 결정하는 비즈니스를 완료해야 합니다. 당연히 이 기능을 구현하려면 정규식은 필수입니다. 정규식을 개선하면 사용법은 실제로 매우 간단합니다. 이 형식을 기억하고 유연하게 실행하면 됩니다.

+은 이전 하위 표현식과 여러 번 일치합니다. 예를 들어, "zo+"는 "zo" 및 "zoo"와 일치할 수 있지만 "z"는 일치하지 않습니다. +는 이전 하위 표현식과 0회 일치하거나 일치합니다. 예: "do(es. )?"는 "does"에서 "does" 또는 "do"와 일치할 수 있습니다. ?는 {0,1}n과 동일합니다. n은 음수가 아닙니다. 정수입니다. 특정 횟수와 일치합니다. 예: "o{ 2}"는 "Bob"의 "o"와 일치할 수 없지만 "food"의 2개의 o와 일치할 수 있습니다. {n,}n. 음수가 아닌 정수입니다. 최소 n번 일치합니다. 예를 들어, "o{2,}"는 "Bob"의 "o"와 일치할 수 없지만 "foooood"의 모든 "o{1,}"와 일치할 수 있습니다. "o+"는 다음과 같습니다. {n,m}M과 n은 모두 음수가 아닌 정수입니다. 여기서 n?이 문자 뒤에 다른 제한 기호(*,+ ,?,{n},{n,},{n,m}) 나중에 일치 모드는 non-greedy 모드이며, 기본 Greedy 모드는 검색된 문자열과 최대한 일치하지 않습니다. 예를 들어, "oooo" 문자열의 경우 "o?"는 단일 "o"와 일치하고 "o+"는 모든 "o"와 일치합니다. "n"을 제외한 모든 단일 문자와 일치합니다. "n"을 포함하여 일치하려면 "[sS]"와 같은 패턴을 사용하고 이 일치 항목을 얻을 수 있습니다. VBScript의 SubMatches 컬렉션을 사용하여 생성된 Matches 컬렉션에서 가져옵니다. JScript에서는 $0...$9 속성을 사용하여 괄호 문자를 일치시키려면 "(" 또는 ")" (?:pattern) 패턴과 일치하지만 일치하는 결과를 얻지 못합니다. 즉, 가져오지 않는 일치는 나중에 사용하기 위해 저장되지 않습니다. 이는 또는 문자 "(|)"를 사용하여 패턴의 일부를 결합할 때 유용합니다. 예를 들어, "industr(?:y|ies)"는 "industry|industries"보다 간단한 표현입니다. (?=pattern)정방향 긍정 조회는 패턴과 일치하는 문자열의 시작 부분에서 검색 문자열을 일치시킵니다. 이는 가져오지 않는 일치입니다. 즉, 나중에 사용하기 위해 일치 항목을 가져올 필요가 없습니다. 예를 들어, "Windows(?=95|98|NT|2000)"는 "Windows2000"의 "Windows"와 일치할 수 있지만 "Windows3.1"의 "Windows"와 일치할 수는 없습니다. 프리페치는 문자를 소비하지 않습니다. 즉, 일치가 발생한 후 다음 일치 항목에 대한 검색은 프리페치를 포함하는 문자 뒤에서 시작하는 것이 아니라 마지막 일치 직후에 시작됩니다. (?!pattern)정방향 부정 조회는 패턴과 일치하지 않는 문자열의 시작 부분에 있는 검색 문자열과 일치합니다. 이는 가져오지 않는 일치입니다. 즉, 나중에 사용하기 위해 일치 항목을 가져올 필요가 없습니다. 예를 들어, "Windows(?!95|98|NT|2000)"는 "Windows3.1"의 "Windows"와 일치할 수 있지만 "Windows2000"의 "Windows"와 일치할 수는 없습니다. (?<=pattern)역방향 긍정 사전 확인은 정방향 긍정 사전 확인과 유사하지만 방향이 반대입니다. 예를 들어, "(?<=95|98|NT|2000)Windows"는 "2000Windows"의 "Windows"와 일치할 수 있지만 "3.1Windows"의 "Windows"와 일치할 수는 없습니다. (?역 부정 조회는 반대 방향을 제외하고 정방향 부정 조회와 유사합니다. 예를 들어 "(?x|y은 x 또는 y와 일치합니다. 예를 들어 " z |food"는 "z" 또는 "food"와 일치합니다. "(z|f)ood"는 "zood" 또는 "food"와 일치합니다.
메타 문자 설명
다음 문자를 특수 문자, 리터럴 문자, 역참조 또는 8진수 이스케이프 문자로 표시합니다. 예를 들어, "n"은 문자 "n"과 일치합니다. "\n"은 개행 문자와 일치합니다. 시퀀스 "\"는 ""와 일치하고 "("는 "("와 일치합니다.
^ 은 입력 문자열의 시작 부분과 일치합니다. RegExp 개체의 Multiline 속성이 설정된 경우 ^는 "n" 또는 "n"과도 일치합니다. "r " after ".
$ 은 입력 문자열의 끝과 일치합니다. RegExp 개체의 Multiline 속성이 설정된 경우 $는 "n" 또는 "r" 앞의 위치와도 일치합니다.
* 이전 하위 표현식과 0회 이상 일치합니다. 예를 들어, zo*는 "z"와 일치하며 *는 {0,}와 동일합니다.
[xyz] 캐릭터 컬렉션. 포함된 문자 중 하나와 일치합니다. 예를 들어, "[abc]"는 "plain"의 "a"와 일치합니다.
[^xyz] 부정 문자 모음입니다. 포함되지 않은 모든 문자와 일치합니다. 예를 들어, "[^abc]"는 "plain"의 "plin"과 일치합니다.
[a-z] 문자 범위. 지정된 범위 내의 모든 문자와 일치합니다. 예를 들어, "[a-z]"는 "a"부터 "z"까지의 범위에 있는 모든 소문자 알파벳 문자와 일치합니다.
참고: 하이픈이 문자 그룹 내부에 있고 두 문자 사이에 있는 경우에만 문자 범위를 나타낼 수 있습니다. 문자 그룹의 시작 부분에 나타나면 하이픈 자체만 나타낼 수 있습니다.
[^a-z ] 음수 문자 범위. 지정된 범위 내에 없는 모든 문자와 일치합니다. 예를 들어, "[^a-z]"는 "a"부터 "z"까지의 범위에 없는 모든 문자와 일치합니다.
b 은 단어와 공백 사이의 위치를 ​​나타내는 단어 경계와 일치합니다. 예를 들어, "erb"는 "never"의 "er"와 일치할 수 있지만 "동사"의 "er"와는 일치하지 않습니다.
B 단어가 아닌 경계와 일치합니다. "erB"는 "동사"의 "er"와 일치할 수 있지만 "never"의 "er"는 일치하지 않습니다.
cx 은 x로 지정된 제어 문자와 일치합니다. 예를 들어, cM은 Control-M 또는 캐리지 리턴 문자와 일치합니다. x 값은 A-Z 또는 a-z 중 하나여야 합니다. 그렇지 않으면 c를 리터럴 "c" 문자로 처리합니다.
d 은 숫자와 일치합니다. [0-9]와 동일합니다.
D 은 숫자가 아닌 문자와 일치합니다. [^0-9]와 동일합니다.
f 은 폼 피드와 일치합니다. x0c 및 cL과 동일합니다.
n 은 개행 문자와 일치합니다. x0a 및 cJ와 동일합니다.
r 은 캐리지 리턴 문자와 일치합니다. x0d 및 cM과 동일합니다.
s 은 공백, 탭, 양식 피드 등을 포함한 모든 공백 문자와 일치합니다. [fnrtv]와 동일합니다.
S 은 공백이 아닌 모든 문자와 일치합니다. [^ fnrtv]와 동일합니다.
t 은 탭 문자와 일치합니다. x09 및 cI와 동일합니다.
v 은 세로 탭 문자와 일치합니다. x0b 및 cK와 동일합니다.
w 은 밑줄을 포함한 모든 단어 문자와 일치합니다. "[A-Za-z0-9_]"와 동일합니다.
W 은 단어가 아닌 문자와 일치합니다. "[^A-Za-z0-9_]"와 동일합니다.
xn 은 n과 일치합니다. 여기서 n은 16진수 이스케이프 값입니다. 16진수 이스케이프 값은 정확히 두 자리 길이여야 합니다. 예를 들어 "x41"은 "A"와 일치합니다. "x041"은 "x04&1"과 동일합니다. ASCII 인코딩은 정규식에서 사용할 수 있습니다.
num 은 num과 일치합니다. 여기서 num은 양의 정수입니다. 획득한 일치 항목에 대한 참조입니다. 예를 들어, "(.)1"은 두 개의 연속된 동일한 문자와 일치합니다.
n 8진수 이스케이프 값 또는 역참조를 식별합니다. n 앞에 가져온 n개 이상의 하위 표현식이 있으면 n은 역방향 참조입니다. 그렇지 않고 n이 8진수(0-7)이면 n은 8진수 이스케이프 값입니다.
nm 8진수 이스케이프 값 또는 역참조를 식별합니다. nm 앞에 최소한 nm get 하위 표현식이 오면 nm은 역방향 참조입니다. nm 앞에 최소한 n의 획득이 있으면 n은 역참조이고 그 뒤에는 리터럴 m이 옵니다. 이전 조건 중 어느 것도 충족되지 않고 n과 m이 모두 8진수(0-7)인 경우 nm은 8진수 이스케이프 값 nm과 일치합니다.
nml n이 8진수(0-7)이고 m과 l이 모두 8진수(0-7)인 경우 8진수 이스케이프 값 nml과 일치합니다.
un 은 n과 일치합니다. 여기서 n은 4개의 16진수 숫자로 표시되는 유니코드 문자입니다. 예를 들어, u00A9는 저작권 기호(©)와 일치합니다.

那么利用上面的规则就可以完成日期时间类型的判断。下面的代码可以完成这样功能。


public static boolean isDateTime(String datetime){
  Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1][0-9])|([2][0-4]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
  return p.matcher(datetime).matches();
}

通过上面的代码我们可以判断日期时间类型,而且它还可以判断纯日期类型,支持的格式为“YYYY-MM-DD HH:mm:ss”和“YYYY-MM-DD”。

当然如果是仅仅判断“YYYY-MM-DD”类型的话,就用下面的代码:


public static boolean isDate(String date){
  Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");
  return p.matcher(date).matches();
}

那么我们如果是要判断“HH:mm:ss”类型就需要用下面的代码来完成对这样的类型的判断。

代码如下:


public static boolean isTime(String time){
  Pattern p = Pattern.compile("((((0?[0-9])|([1][0-9])|([2][0-4]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
  return p.matcher(time).matches();
}

有了上面的三个代码,就可以完成对日期和时间的判断了。

위 내용은 Java는 정규식을 사용하여 시간 및 날짜 판단 작업 분석을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.