수색…


소개

정규 표현식 패턴은 대개 정규 표현식 동작을 재정의하는 수정 자 ( 플래그 라고도 함)와 함께 사용됩니다. 정규 표현식 수정자는 정규 (예 : /abc/i ) 및 인라인 (또는 포함 ) 일 수 있습니다 (예 : (?i)abc ). 가장 일반적인 수식어는 대문자와 소문자를 구별하지 않는, 복수의 마디와 닷의 수식 자입니다. 그러나 regex flavors는 지원되는 regex 수식어와 그 유형의 수가 다릅니다.

비고

PCRE 수정 자

모디파이어 인라인 기술
PCRE_CASELESS (?나는) 대소 문자를 구분하지 않는 일치
PCRE_MULTILINE (?엠) 여러 줄 일치
PCRE_DOTALL (?에스) . 새 줄과 일치하다
PCRE_ANCHORED (?에이) 메타 문자 ^ 는 처음에만 일치합니다.
PCRE_EXTENDED (?엑스) 공백은 무시됩니다.
PCRE_DOLLAR_ENDONLY 해당 없음 메타 문자 $ 는 끝에 만 일치합니다.
PCRE_EXTRA (?엑스) 엄격한 이스케이프 구문 분석
PCRE_UTF8 UTF-8 문자를 처리합니다.
PCRE_UTF16 UTF-16 문자를 처리합니다.
PCRE_UTF32 UTF-32 문자를 처리합니다.
PCRE_UNGREEDY (?유) 엔진을 lazy matching으로 설정합니다.
PCRE_NO_AUTO_CAPTURE (? :) 자동 캡처 그룹을 비활성화합니다.

Java 수정 자

수정 자 ( Pattern.### ) 기술
UNIX_LINES 1 Unix 행 모드를 사용합니다.
CASE_INSENSITIVE 2 대소 문자를 구분하지 않고 일치시킵니다.
코멘트 4 공백과 주석을 패턴으로 허용합니다.
멀티 라인 8 여러 줄 모드를 사용합니다.
정확한 16 패턴의 리터럴 구문 분석을 사용합니다.
DOTALL 32 도트 모드를 사용합니다.
UNICODE_CASE 64 개 유니 코드 인식 대 / 소문자 구분을 가능하게합니다.
CANON_EQ 128 자 표준 등가성을 가능하게합니다.
UNICODE_CHARACTER_CLASS 256 자 미리 정의 된 문자 클래스 및 POSIX 문자 클래스의 유니 코드 버전을 사용합니다.

DOTALL 변경자

DOTALL 수정 자 (대부분의 정규 표현식에서 s 표현됨)가의 동작을 변경하는 정규 표현식 패턴 . 줄 바꿈 (LF) 기호와 일치시킬 수 있습니다.

/cat (.*?) dog/s

이 Perl 스타일 정규식은 "cat fled from\na dog" 과 같은 문자열을 "cat fled from\na dog" "fled from\na" 을 그룹 1로 캡처합니다.

인라인 버전 : (?s) (예 : (?s)cat (.*?) dog )

참고 : Ruby에서 DOTALL 수정자는 m , Regexp::MULTILINE 수정 자 (예 : /a.*b/m )입니다.

참고 : JavaScript는 DOTALL 수정자를 제공하지 않으므로 a . 개행 문자를 일치시킬 수 없습니다. 동일한 효과를 얻으려면 해결 방법이 필요합니다 . 예를 들어 . [\S\s] 와 같은 catch-all 문자 클래스 또는 아무것도없는 문자 클래스 [^] 구성됩니다 (그러나이 구성은 다른 모든 엔진에서 오류로 처리되므로 이식성이 없습니다).

멀티 라인 수정 자

또 다른 예는 (일반적으로 표현 줄로 개질제 인 m 플래그 (하지 사용 Oniguruma (예 루비)에서 m 그 만드는 DOTALL 개질제)를 나타 내기 위해) ^$ 앵커는 라인이 아닌 시작 / 종료의 시작 / 끝과 일치 전체 문자열의.

/^My Line \d+$/gm

My Line 시작하는 모든 을 찾은 다음 행 끝까지 1 자 이상의 자리를 포함합니다.

인라인 버전 : (?m) (예 : (?m)^My Line \d+$ )

참고 : Oniguruma (예 : Ruby) 및 regexps를 지원하는 거의 모든 텍스트 편집기에서 ^$ 앵커는 기본적으로 시작 / 끝 위치 나타냅니다. \A 를 사용하여 전체 문서 / 문자열 시작을 정의하고 \z 를 사용하여 문서 / 문자열 끝을 나타낼 수 있습니다. \Z\z 의 차이점은 문자열의 끝에있는 마지막 개행 (LF) 기호 앞에 일치 할 수 있다는 것입니다 (예 : /\Astring\Z/"string\n" 에서 일치하는 것을 찾습니다) (단, "string\n" Python, \Z 동작은 \z\z anchor는 지원되지 않음).

IGNORE CASE 수정 자

대소 문자를 무시하는 공통 수정자는 i .

/fog/i

Fog , foG 등과 일치합니다.

수정 자의 인라인 버전은 (?i) 와 같습니다.

노트:

Java에서 기본적으로 대 / 소문자를 구분하지 않는 일치는 US-ASCII 문자 세트의 문자 만 일치한다고 가정합니다. 유니 코드 인식 CASE_INSENSITIVE 플래그와 함께 UNICODE_CASE 플래그를 지정하여 대 / 소문자를 구분하지 않는 일치를 사용할 수 있습니다 . (예 : Pattern p = Pattern.compile("YOUR_REGEX", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); )). 이에 대한 자세한 내용 은 Java RegEx의 대소 문자를 구분하지 않는 일치에서 찾을 수 있습니다. 또한 UNICODE_CHARACTER_CLASS 를 사용하여 일치하는 유니 코드를 인식 할 수 있습니다.

VERBOSE / COMMENT / IgnorePatternWhitespace 수정 자

패턴의 일부 안의 공백을 사용하여 가독성을 높이고 # :로 시작하는 주석을 허용하는 수식어.

/(?x)^          # start of string
  (?=\D*\d)     # the string should contain at least 1 digit 
  (?!\d+$)      # the string cannot consist of digits only
  \#            # the string starts with a hash symbol
  [a-zA-Z0-9]+ # the string should have 1 or more alphanumeric symbols
  $             # end of string
/

문자열의 예 : #word1here . # 기호는 이스케이프 처리되어 패턴의 일부인 리터럴 # 을 나타냅니다.

정규식 패턴의 이스케이프 처리되지 않은 공백은 무시되며 패턴의 일부가되도록 이스케이프 처리됩니다.

대개 문자 클래스 ( [...] ) 안에있는 공백은 Java를 제외하고는 리터럴 공백으로 처리됩니다.

또한 PCRE, .NET, Python, Ruby Oniguruma, ICU, Regex 패턴 내에서 (?#:...) 주석을 사용할 수있는 정규 표현식을 부스트 할 가치가 있습니다.

명시 적 캡처 한정자

이것은 n 표현 된 .NET 정규식 특정 수정 자입니다. 사용시 (\d+) 와 같은) 익명의 그룹은 포착되지 않습니다. 유효한 캡처에만 명시 적으로 이름이 지정된 그룹 (예 : (?<name> subexpression) ).

(?n)(\d+)-(\w+)-(?<id>\w+)

123-1_abc-00098 전체와 일치하지만 (\d+)(\w+) 는 결과 일치 개체에 그룹을 만들지 않습니다. 유일한 그룹은 ${id} 입니다. 데모 보기.

유니 코드 수정 자

보통 u (PHP, Python) 또는 U (Java)로 표현되는 UNICODE 수정자는 정규 표현식 엔진이 패턴과 입력 문자열을 유니 코드 문자열 및 패턴으로 처리하고 \w , \d , \s 와 같은 패턴 축약 클래스를 만듭니다 유니 코드 인식.

/\A\p{L}+\z/u

하나 이상의 유니 코드 문자로 구성된 문자열을 일치시키는 PHP 정규식입니다. regex 데모를보십시오 .

PHP 에서 /u 수정자를 사용하면 PCRE 엔진이 UTF8 문자열로 문자열을 처리하고 ( PCRE_UTF8 동사를 켜서) 유니 코드 인식 패턴의 속기 문자 클래스를 만들 수 있습니다 ( PCRE_UCP 동사를 활성화하여 자세한 내용은 pcre.org 참조) .

패턴 및 주제 문자열은 UTF-8로 처리됩니다. 이 수정자는 Unix에서는 PHP 4.1.0 이상에서, win32에서는 PHP 4.2.3에서 사용할 수 있습니다. 패턴과 주체의 UTF-8 유효성은 PHP 4.3.5부터 확인됩니다. 잘못된 주체는 preg_ * 함수가 아무 것도하지 않게합니다. 유효하지 않은 패턴은 레벨 E_WARNING의 오류를 트리거합니다. 5 및 6 옥텟 UTF-8 시퀀스는 PHP 5.3.4 이후 유효하지 않은 것으로 간주됩니다 (PCRE 7.3 2007-08-28). 이전에는 유효한 UTF-8로 간주되었습니다.

Python 2.x에서 re.UNICODE 는 패턴 자체에만 영향을 미칩니다. Make \w , \W , \b , \B , \d , \D , \s\S 는 유니 코드 문자 속성 데이터베이스에 종속됩니다.

인라인 버전 : (?u) 파이썬에서, (?U) 자바있다. 예 :

print(re.findall(ur"(?u)\w+", u"Dąb")) # [u'D\u0105b']
print(re.findall(r"\w+", u"Dąb"))      # [u'D', u'b']

System.out.println("Dąb".matches("(?U)\\w+")); // true
System.out.println("Dąb".matches("\\w+"));     // false

PCRE_DOLLAR_ENDONLY 수정 자

$ 앵커 가 문자열 맨 끝에 일치하도록하는 PCRE 호환 PCRE_DOLLAR_ENDONLY 한정자 ( 문자열 의 마지막 줄 바꿈 앞에 위치 제외).

/^\d+$/D

동일하다

/^\d+\z/

1 개 이상의 숫자로 구성되어 있으며 일치하지 않습니다 전체 문자열과 일치 "123\n" , 그러나 일치 "123" .

PCRE_ANCHORED 수정 자

/A 수정 자로 표현 된 또 다른 PCRE 호환 수식어. 이 변경자가 설정되면 패턴은 강제로 "고정"됩니다. 즉, 검색중인 문자열의 시작 부분 ( "제목 문자열")에서만 일치하도록 제한됩니다. 이 효과는 Perl에서 수행 할 수있는 유일한 방법 인 패턴 자체에서 적절한 구문을 사용하여 수행 할 수도 있습니다.

/man/A

와 같다

/^man/

PCRE_UNGREEDY 수정 자

/U 표시되는 PCRE 호환 PCRE_UNGREEDY 플래그. 패턴 내에서 /a.*?b/U 전환합니다 : /a.*?b/U = /a.*b/ 그 반대도 마찬가지입니다.

PCRE_INFO_JCHANGED 수정 자

중복 된 명명 된 그룹의 사용을 허용하는 또 다른 PCRE 수정 자.

참고 : 인라인 버전 만 지원됩니다 (- (?J) . 패턴 시작 부분에 배치해야합니다.

사용하는 경우

/(?J)\w+-(?:new-(?<val>\w+)|\d+-empty-(?<val>[^-]+)-collection)/

"val"그룹 값은 결코 비어 있지 않습니다 (항상 설정됩니다). 브랜치 리셋을 사용해도 비슷한 효과를 얻을 수 있습니다.

PCRE_EXTRA 수정 자

패턴의 백 슬래시 뒤에 특별한 의미가없는 문자가 오면 오류가 발생하는 PCRE 수정 자. 기본적으로 백 슬래시 뒤에 특별한 의미가없는 문자가 있으면 리터럴로 처리됩니다.

예 :

/big\y/

bigy 와 일치 할 것이다.

/big\y/X

예외를 throw합니다.

인라인 버전 : (?X)



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow