Regular Expressions
정규 표현식 수정 자 (플래그)
수색…
소개
정규 표현식 패턴은 대개 정규 표현식 동작을 재정의하는 수정 자 ( 플래그 라고도 함)와 함께 사용됩니다. 정규 표현식 수정자는 정규 (예 : /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)