Latest web development tutorials

정규 표현식 - 구문

정규식 (정규 표현식) 캐릭터 라인 교체하거나 조건을 제거하는 문자열과 일치하는 특정 문자열이 포함되어 있는지 여부를 확인하는 데 사용할 수있는 문자열의 집합을 설명하는 문자열에서 문자열을 일치 등등.

  • 열 카탈로그, DIR * .txt를 1! * .txt 또는 * .txt를하지 정규 표현식에서, 정규 표현식 의미가 다른과 * *이 있기 때문에입니다.
  • 및 정규 표현식을 구성하는 방법은 수학 식 같은 방법으로 생성한다. 즉, 큰 식을 만들 함께 작은 식을 결합하여 메타 및 다양한 연산자를 사용한다. 부품 정규식은 단일 문자, 문자 세트 할 문자, 또는 이들 성분의 임의의 조합 사이의 문자의 범위를 선택할 수있다.

정규 표현식은 텍스트 모드가 그 (소위 "메타 문자") 및 특수 문자 (예 : A ~ Z까지 문자 등) 공통 문자로 구성됩니다. 모드 설명 텍스트를 검색 할 때 하나 이상의 문자열을 개발하였습니다. 템플릿, 문자 모드와 일치하는 검색 문자열과 같은 정규 표현식.

일반 문자

일반 문자는 명시 적으로 메타 문자로 모든 인쇄 및 비 인쇄 문자를 지정하지 않습니다. 이것은 모든 대문자와 소문자, 모든 숫자, 모든 구두점 및 다른 기호를 포함한다.

비 인쇄 문자

비 인쇄 문자는 정규 표현의 일부가 될 수있다. 다음 표는 비 인쇄 문자를 나타내는 이스케이프 시퀀스를 보여줍니다

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

특수 문자

소위 특수 문자, 일부 문자는 "*이 .txt는"*에 말한대로, 단순히 어떤 의미의 문자열 표현을 의미, 특별한 의미를 가지고있다. 당신이 * 파일로 파일 이름을 찾으려면, 당신은 그 전면 \에있는 플러스는 *를 탈출해야합니다. LS \ *. TXT.

그들과 일치 할 때 대부분의 메타 문자는 특별한 치료가 필요합니다. 이러한 특수 문자를 일치 시키려면, 먼저 문자 "탈출"을해야합니다, 즉, 그들의 앞에 백 슬래시 문자 (\). 다음 표는 정규 표현식 특수 문자를 나열합니다 :

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。

예선

예선은 경기를 충족하기 위해 많은 시간을 표시해야합니다 특정 구성 요소의 정규 표현식을 지정하는 데 사용됩니다. 이 * 또는 + 또는? 아니면 {N} 또는 {N} 또는 6의 {N, m} 총.

정규 표현식의 규정은 다음과 같습니다 :

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

대형 입력 문서에서 챕터 번호 보낸 가능성 9 개 이상의 것 두 개 또는 세 개의 챕터 번호를 처리하는 방법이 필요하므로. 규정은이 기능을 제공합니다. 다음 정규 표현식 비트 번호 장 제목의 번호와 일치 :

/Chapter [1-9][0-9]*/

규정의 범위 발현 후 나타나는 있습니다. 따라서,이 경우, 식의 전체 범위 (0 ~ 9 포함) 0-9는 지정된 번호를 적용한다.

+ 한정자는 제 위치 또는 반드시 수 없어도 후방 위치에서와 같이, 여기에 사용되지 않는다. 도 사용할 수 있습니까? 캐릭터, 단지 두 자리 챕터 번호를 제한하기 때문이다. 당신은 다시 하나 이상의 숫자 장과 공간 문자와 일치해야합니다.

당신이 장 번호는 99 장으로 제한됩니다 알고 있다면, 당신은 적어도 하나의 그러나 최소한 두 자리 숫자를 지정하려면 다음 식을 사용할 수 있습니다.

/Chapter [0-9]{1,2}/

상기 식의 단점은 여전히 ​​두 자릿수의 시작과 일치하는보다 큰 99 장이다. 또 다른 단점은 장 0도 일치하는 것입니다. 다음과 같이 표현의 두 자리 숫자의 더 나은 일치는 다음과 같습니다

/Chapter [1-9][0-9]?/

또는

/Chapter [1-9][0-9]{0,1}/

*, +, 그리고 그들은 단지 그들 뒤에, 많은 텍스트와 일치하기 때문에? 예선은 욕심 플러스는? 비 욕심 또는 최소한의 일치를 달성 할 수 있습니다.

예를 들어, H1 태그 섹션 제목 안에 찾을 수있는 HTML 문서를 검색 할 수 있습니다. 문서의 텍스트 다음과 같습니다 :

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

모든 내용이 다음과 같은 표현이 기호 이하에서 시작 일치 (<) () 사이의 H1 태그 기호보다 큰 닫습니다>.

/<.*>/

당신은 H1 태그의 시작과 일치해야하는 경우, 다음과 같은 "비 욕심"표현은 <H1>을 일치합니다.

/<.*?>/

저자 *, +, 또는? 규정 장소 후? 표현식은 "비 욕심"또는 최소한의 표현의 일치에 "욕심"에서 전환 할 수 있습니다.

로케이터

정규 표현식은 줄의 시작 또는 끝 부분에 고정에 로케이터 할 수 있습니다. 또한 이러한 정규 표현식은 단어의 시작 또는 끝에서 단어에서 단어를 표시, 당신은 정규 표현식을 만들 수 있습니다.

로케이터 문자열의 시작과 끝을 참조하는 문자열이나 단어의 경계, ^을 설명하고 $하는 데 사용, \ B 경계를 설명하기 전에 또는 단어 후, \ B는 비 단어 경계를 나타냅니다.

정규 표현식의 규정은 다음과 같습니다 :

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

참고 : 규정 및 앵커 포인트를 사용할 수 없습니다. 직전 또는 포장 또는 워드 경계 후에 하나 이상의 위치에있을 수 없으므로 ^ *처럼 같은 식을 허용하지 않기 때문이다.

텍스트의 시작 부분에 텍스트의 라인과 일치하도록, 식 N ^ 문자를 사용하여주세요. ^ 혼란 이내에 사용을 괄호 안에 식을 사용하지 마십시오.

텍스트 행의 끝에서 텍스트와 일치하도록, 포지티브 $에서 문자를 사용하여 표현의 끝을 참조.

앵커 포인트는 다음과 같은 정규 표현식은 장 제목과 일치 할 때 검색 섹션 제목을 사용하려면 제목은 두 뒤에 숫자, 그리고 라인의 시작 포함

/^Chapter [1-9][0-9]{0,1}/

참 장 제목 만 라인의 시작 부분에 나타나 있지만, 행의 텍스트 만이다. 광고가 처음 동일 행의 끝에 나타나 보인다. 다음 표현식은 지정된 경기는 상호 참조 섹션을 일치하지 않고 일치하는지 확신 할 수 있습니다. 만 일치 시작과 정규 표현식의 텍스트 줄의 끝을 만들어, 당신은 그것을 할 수 있습니다.

/^Chapter [1-9][0-9]{0,1}$/

대전 단어 경계가 약간 다르지만 정규식 매우 중요한 기능. 단어 경계의 위치와 단어 사이의 공간이다. 비 단어 경계는 다른 위치입니다. 이 세 문자가 단어 경계 뒤에 표시하기 때문에 다음과 같은 표현은 단어 제 3 장 문자의 시작과 일치 :

/\bCha/

\ B 문자 위치가 매우 중요하다. 이 매칭되는 문자열의 시작 부에 배치되는 경우, 상기 단어의 시작에서 일치 보인다. 이 문자열의 끝에있을 경우, 단어의 끝에서 매치를 보인다. 이 단어 경계의 전면에 나타나는 예를 들어, 다음 식, 즉 제 문자열 터 일치 :

/ter\b/

다음 표현식은 문자열 장 쉽다 일치하지만 적절한 문자열 적성과 일치하지 않습니다

/\Bapt/

아파트 단어 문자열은 장 비 단어 경계에 표시되지만 단어는 단어 경계의 적성에 나타납니다. 매치는 단어의 시작 또는 끝 부분에 있는지 여부를 상관하지 않기 때문에 \ B 비 단어 경계 연산자 위치는 중요하지 않다.

선택

|로 구분 인접 사이의 옵션으로, 모든 선택을 둘러싸는 괄호를 사용합니다. 그러나 괄호를 사용하는 부작용이있다,이 부작용을 제거하기 위해 첫 번째 옵션에서이 시간 :?에서 사용 가능한 캐시됩니다 중요한 경기입니다.

에있어서 :? 비 캡처 한 요소를,이 두 비 캡처 요소 것은있다 = 두 더 많은 의미를 가지고, 모든 시작의 전 긍정적 인 사전 조사, 일치하는 괄호되는 것은 식입니다?! 위치 패턴 검색 문자열과 일치하는 정규 표현 패턴과 일치하지 않는 임의의 시작 위치, 음의 예비 조사되는 검색 문자열을하였습니다.

역 참조

추가 괄호가 발생합니다 양쪽에있는 패턴의 정규 표현식 패턴 또는 일부를 임시 저장 버퍼와 관련이 경기는, 각각의 서브 캡처 바로 경기에 왼쪽부터 순서대로 저장되어있는 정규 표현식 패턴에 나타납니다. 처음부터 버퍼 번호 1, 99 캡처 표현식을 저장할 수 있습니다. 각 버퍼는 n은 하나 또는 두 개의 소수 자리는 특정 버퍼를 식별하는 것입니다 '\ n을'방문을 사용할 수 있습니다.

당신은 관련 경기 '=?'를? 무시하는 저장 ':?'비 캡처 메타 문자를 사용하거나 캡처를 다시 작성! '.

가장 유용한 중 하나가 두 개의 동일한 인접한 단어 매치를 찾기 위해 텍스트를 제공하는 기능이다 쉬운 역 참조. 다음 문장의 예 :

Is is the cost of of gasoline going up up?

위의 문장은 분명히 많은 반복되는 단어가 있습니다. 우리는 문장을 찾는 대신 중복 된 각 단어의 발생, 더 좋은 것을 발견하는 방법을 고안 할 수있는 경우. 다음 정규 표현식이를 달성하기 위해 하나의 표현식을 사용합니다 :

/\b([a-z]+) \1\b/gi

캡처 식으로 [AZ] + 하나 이상의 문자를 포함하여, 지정했습니다. 일반 식의 두 번째 부분은 단어의 두 번째 발생을 막 괄호 표현과 일치, 즉, 이전에 캡처 아이 기준과 일치하는 것이다. 1 \ 것은 제 1 부 경기를 지정합니다. 단어 경계 메타 문자는 전체 단어를 검색 있는지 확인합니다. 그렇지 않으면, 예 : "발행"또는 문구 "이다"등이 올바르게 표현을 식별하지 않습니다.

글로벌 태그 (g) 후 정규 표현식이 표현이 많은 일치를 찾을 수 있습니다 입력 문자열에 적용 나타냅니다. (ⅰ) 태그의 끝 부분에 영향을받지 식 케이스는 대소 문자를 구분 지정합니다. 잠재적 인 경기 멀티 라인 태그는 줄 바꿈이 양쪽에 발생할 수 지정합니다.

역 참조는 해당 구성 요소에 범용 리소스 표시기 (URI)를 할 수 있습니다. 당신이로 나눌 수 싶어한다고 가정 URI 프로토콜 (FTP, HTTP 등), 도메인 주소 및 페이지 / 경로 다음 :

http://www.w3cschool.cc:80/html/html-tutorial.html

다음 정규 표현식이 기능을 제공합니다 :

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

첫번째 괄호 서브 표현식 웹 어드레스의 프로토콜 부분을 캡처한다. 서브 표현식은 단어 대장과 일치하는 두 포워드 앞에 슬래시. 두 번째 괄호 서브 표현식은 주소의 도메인 주소 부분을 캡처한다. 하나 이상의 문자가 다른 것보다 : 표현식 일치 /합니다. (지정된 경우) 세 번째 괄호 하위 표현식은 포트 번호를 캡처합니다. 서브 표현식은 콜론 후 0 개 이상의 숫자와 일치합니다. 그것은 단지 서브 표현식 1 회 반복 될 수있다. 마지막으로 네 번째 서브 표현식은 괄호로 지정된 웹 주소 및 / 또는 페이지를 캡처한다. 이 자식 표현이 모든 문자 시퀀스 #이나 공백 문자와 일치 포함되지 않습니다.

URI 위의에 적용되는 정규 표현식은 서브 일치하는 항목은 다음과 같은 요소를 포함한다 :

  • 첫 번째 괄호 하위 표현식은 "HTTP"를 포함
  • 두 번째 괄호 하위 표현식은 "www.w3cschool.cc"를 포함
  • 와 세 번째 괄호 하위 표현식 "80"
  • 네 번째 괄호 부분 식에 포함 된 "/html/html-tutorial.html"