이 기사의 예에서는 정규식 튜토리얼의 반복 매칭을 설명합니다. 다음과 같이 참조용으로 모든 사람과 공유하세요.
참고: 모든 예제에서 정규식 일치 결과는 소스 텍스트의 [and] 사이에 포함됩니다. Java 자체의 정규식에 대한 설명은 해당 위치에서 설명합니다. 모든 Java 예제는 JDK1.6.0_13에서 테스트되었습니다.
1. 일치하는 항목은 몇 개입니까?
이전 기사에서는 하나의 문자를 일치시키는 것에 대해 설명했지만 문자 또는 문자 집합을 여러 번 일치시켜야 합니다. 예를 들어, 이전에 언급한 방법을 사용하여 이메일 주소를 일치시키려는 경우 누군가 w@w.w와 같은 정규식을 작성할 수 있지만 이는 a@b.c와 같은 주소만 일치할 수 있으며 이는 분명히 잘못된 방법입니다. 이메일 주소를 일치시키려면
먼저 이메일 주소의 구성을 알아야 합니다. 영숫자 또는 밑줄로 시작하고 @ 기호가 뒤따른 문자 그룹, 도메인 이름, 즉 사용자 이름@도메인 이름입니다. 주소. 그러나 이는 특정 이메일 서비스 제공업체에 따라 다릅니다. 일부는 사용자 이름에 .
1. 하나 이상의 문자 일치
동일한 문자(또는 문자 집합)의 여러 반복을 일치시키려면 접미사로 + 문자를 추가하면 됩니다. +는 하나 이상의 문자(적어도 하나)와 일치합니다. 예를 들어, a는 a 자체와 일치하고, a+는 하나 이상의 연속된 a와 일치합니다. [0-9]+는 여러 연속 숫자와 일치합니다.
참고: 문자 집합에 + 접미사를 추가하는 경우 +는 문자 집합 외부에 배치되어야 합니다. 그렇지 않으면 반복되는 일치가 발생하지 않습니다. 예를 들어, [0-9+]는 숫자나 + 기호를 나타냅니다. 문법적으로는 정확하지만 우리가 원하는 것은 아닙니다.
텍스트: 안녕하세요, mhmyqn@qq.com 또는 mhmyqn@126.com이 제 이메일입니다.
정규식: w+@(w+.)+w+
결과 : 안녕하세요, [mhmyqn@qq.com] 또는 [mhmyqn@126.com]은 제 이메일입니다.
분석: w+는 하나 이상의 문자와 일치할 수 있으며 하위 표현식 (w+.)+는 다음과 같은 문자열과 일치할 수 있습니다. xxxx.edu는 . 문자로 끝나지 않으므로 끝에 w+가 표시됩니다. mhmyqn@xxxx.edu.cn과 같은 이메일 주소도 일치됩니다.
2. 0개 이상의 문자 일치
메타 문자 *를 사용하여 0개 이상의 문자를 일치시킵니다. 사용법은 +와 정확히 동일하며, 문자 옆에 넣거나 세트 뒤에 넣기만 하면 됩니다. 를 사용하면 해당 문자(또는 문자 집합)가 0개 이상 연속으로 나타나는 것을 일치시킬 수 있습니다. 예를 들어 정규식 ab*c는 ac, abc, abbbbc 등과 일치할 수 있습니다.
3. 0개 또는 1개의 문자를 일치시킵니다.
0개 또는 1개의 문자를 일치시키려면 메타 문자 ?를 사용합니다. 이전 글에서 언급했듯이, 빈 줄을 일치시키기 위해 정규식 rnrn을 사용하지만 Unix와 Linux에서는 r이 필수가 아니므로 Windows에서는 메타 문자 ?, r?nr?n을 사용하여 빈 줄을 일치시킬 수 있습니다. Unix와 Linux에서는 빈 줄과 일치합니다. http 또는 https 프로토콜과 일치하는 URL의 예를 살펴보겠습니다.
텍스트: URL은 http://www.mikan.com입니다. 대신 https://www.mikan.com을 사용하여 안전하게 연결하세요. .
정규식: https?://(w+.)+w+
결과: URL은 [http://www.mikan.com]입니다. 안전하게 연결하려면 [https를 사용하세요. : //www.mikan.com] 대신
분석: 이 패턴은 https?로 시작하는데, 이는 ? 앞의 문자가 존재할 수도 있고 존재하지 않을 수도 있으므로 http 또는 https와 일치할 수 있음을 의미합니다. 및 이전 부분은 예시와 동일합니다.
2. 일치 반복 횟수
정규식의 +, * 및 ?는 많은 문제를 해결하지만:
1) + 및 *와 일치하는 문자 수가 있습니다. 개수에는 상한이 없습니다. 일치하는 최대 문자 수를 설정할 수 없습니다.
2) +, * 및 ?는 최소한 1개 또는 0개의 문자와 일치합니다. 일치하는 다른 최소 문자 수를 설정할 수 없습니다.
3) *와 +만 사용하면 일치하는 문자 수를 정확한 숫자로 설정할 수 없습니다.
정규식은 반복 횟수를 설정하는 구문을 제공합니다. 반복 횟수는 { 및 } 문자를 사용하여 지정하고 그 사이에 값을 입력해야 합니다.
1. 반복 일치 횟수에 대한 정확한 값을 설정하세요.
반복 일치 횟수에 대한 정확한 값을 설정하려면 {와 } 사이에 숫자를 쓰면 됩니다. 예를 들어, {4}는 앞의 문자(또는 문자 집합)가 원본 텍스트에서 4번 반복되어야 일치 항목으로 간주된다는 의미입니다. 3번만 나타나면 일치 항목으로 간주되지 않습니다.
페이지의 색상 일치에 대한 이전 기사에서 언급했듯이 #[[:xdigit:]]{6} 또는 #[0-9a-fA와 같이 반복 횟수를 사용하여 일치시킬 수 있습니다. -F ]{6}, POSIX 문자는 Java에서 #\p{XDigit}{6}입니다.
2. 반복 일치 횟수 간격 설정
{} 구문을 사용하여 반복 일치 횟수 간격을 설정할 수도 있습니다. 즉, 최소값과 최대값을 설정할 수 있습니다. 값. 이러한 간격은 {n, m} 형식으로 제공되어야 하며, 여기서 n>=m>=0입니다. 예를 들어 날짜 형식이 올바른지 확인하는 정규식(날짜의 유효성을 확인하지 않고)(예: 2012-08-12 또는 2012-8-12 날짜): d{4}-d{1, 2}-d{1, 2}.
3. 경기는 최소 몇 번 반복해야 할까요
{} 구문의 마지막 용도는 최소 반복 횟수(반드시 최대 반복 횟수는 아님)를 제공하는 것입니다. 예를 들어 최소 3번의 반복을 나타내는 {3,}입니다. 참고: {3,}에는 쉼표가 있어야 하며, 쉼표 뒤에 공백이 있어서는 안 됩니다. 그렇지 않으면 뭔가 잘못될 것입니다.
예를 살펴보겠습니다. 정규식을 사용하여 $100보다 큰 모든 금액을 찾습니다.
텍스트:
$25.36
$125.36
$205.0
$2500.44
$44.30
정규 표현식: $d{3,}.d{2}
결과:
$25.36
[$125.36]
[$205.0]
[$2500.44]
$44.30
+,*,?예 반복 횟수:
+는 {1,}
*과 동일합니다. {0,}
은 {0,1}
과 동일합니다.3. 과잉 일치 방지
? 0개 또는 1개의 문자만 일치할 수 있습니다. {n} 및 {n,m}에도 반복 횟수에 상한이 있지만 *, +, {n, }에는 상한이 없으므로 때로는 오버매칭이 발생합니다.
html 태그 일치의 예를 살펴보겠습니다
텍스트:
어제는 역사,내일은 미스터리< ;/ B>, 그런데 오늘은 선물입니다.
정규 표현식: <[Bb]>.*[Bb]>
결과:
어제는 [역사, 내일은 미스터리이지만 오늘은 선물]입니다.
분석: <[Bb]>는 태그와 일치하고(대소문자 구분) [Bb]>는 태그와 일치합니다. 그러나 결과는 예상과 다릅니다. 첫 번째 태그 이후부터 마지막 까지 모두 일치합니다.
왜 이런 일이 일어나는 걸까요? *와 +는 둘 다 탐욕스러운 메타 문자이기 때문에 일치 시 동작 패턴이 많을수록 텍스트의 시작부터 끝까지 일치하는 것이 아니라 텍스트의 시작부터 끝까지 일치하도록 최선을 다할 것입니다. 첫 번째 일치가 발생합니다.
그러한 탐욕스러운 행동이 필요하지 않을 때 이러한 메타문자의 게으른 버전을 사용할 수 있습니다. 게으른(Lazy)은 탐욕스러운(greedy) 것과 달리 가능한 한 적은 수의 문자를 일치시키는 것을 의미합니다. 게으른 메타 문자는 탐욕스러운 메타 문자에 ? 접미사만 추가하면 됩니다. 탐욕스러운 메타 문자의 게으른 버전은 다음과 같습니다.
* *?
+ >따라서 위의 예에서 정규 표현식은 <[Bb]>로만 변경하면 됩니다. *?[Bb]> 결과는 다음과 같습니다.
history< /b>
mystery
선물
IV.요약
정규 표현식 수식의 진정한 힘은 일치하는 반복 횟수에 반영됩니다. 여기서는 +, *, ?와 같은 여러 메타 문자의 사용법을 소개합니다. 일치 항목 수를 정확하게 확인하려면 {}를 사용하세요. 메타문자에는 탐욕적(greedy) 유형과 게으른(lazy) 유형이 있습니다. 과도한 일치를 방지해야 하는 경우에는 게으른(lazy) 메타문자를 사용하여 정규식을 구성하세요. 포지션 매칭은 다음 글에서 소개하겠습니다.
이 글이 정규 표현식을 배우는 모든 분들에게 도움이 되기를 바랍니다.
반복 매칭에 대한 더 많은 정규식 튜토리얼과 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!