이 글에서는 정규식을 기반으로 하는 Java의 일반적인 날짜 및 시간 판단 연산을 주로 소개합니다. 정규식에서 흔히 사용되는 메타 문자의 의미를 간략하게 설명하고 정규식을 기반으로 하는 Java의 일반적인 날짜 및 시간 형식에 대한 판단 연산 기술을 예제 형식으로 분석합니다. . 도움이 필요한 친구가 참고할 수 있습니다
이 글에서는 Java 정규식을 기반으로 하는 일반적인 시간 및 날짜 판단 연산을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
최근에 해당 작업을 수행하기 위해 사용자가 입력한 시간과 날짜 유형을 결정하는 비즈니스를 완료해야 합니다. 당연히 이 기능을 구현하려면 정규식은 필수입니다. 정규식을 개선하면 사용법은 실제로 매우 간단합니다. 이 형식을 기억하고 유연하게 실행하면 됩니다.
메타 문자 | 설명 |
다음 문자를 특수 문자, 리터럴 문자, 역참조 또는 8진수 이스케이프 문자로 표시합니다. 예를 들어, "n"은 문자 "n"과 일치합니다. "\n"은 개행 문자와 일치합니다. 시퀀스 "\"는 ""와 일치하고 "("는 "("와 일치합니다. | |
^ | 은 입력 문자열의 시작 부분과 일치합니다. RegExp 개체의 Multiline 속성이 설정된 경우 ^는 "n" 또는 "n"과도 일치합니다. "r " after ". |
$ | 은 입력 문자열의 끝과 일치합니다. RegExp 개체의 Multiline 속성이 설정된 경우 $는 "n" 또는 "r" 앞의 위치와도 일치합니다. |
* | 이전 하위 표현식과 0회 이상 일치합니다. 예를 들어, zo*는 "z"와 일치하며 *는 {0,}와 동일합니다. |
은 이전 하위 표현식과 여러 번 일치합니다. 예를 들어, "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 | |
[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 중국어 웹사이트의 기타 관련 기사를 참조하세요!