답변:
다음 정규식을 전역 적으로 사용할 수 있습니다 .
\[(.*?)\]
설명:
\[
: [
은 메타 문자이므로 문자 그대로 일치 시키려면 이스케이프해야합니다.(.*?)
: 탐욕스럽지 않은 방식으로 모든 것을 일치시키고 포착하십시오.\]
: ]
은 메타 문자이므로 문자 그대로 일치 시키려면 이스케이프해야합니다.[
]
출력 (결과)에서 제외하는 방법 ?
(?<=\[).+?(?=\])
대괄호없이 내용을 캡처합니다
(?<=\[)
-긍정적 인 견해 [
.*?
-콘텐츠에 대한 욕심없는 일치
(?=\])
-긍정적 인 전망 ]
편집 : 중첩 된 괄호의 경우 아래 정규식이 작동해야합니다.
(\[(?:\[??[^\[]*?\]))
.
합니다.
대괄호를 중첩 할 수 있습니까?
그렇지 않은 경우 : \[([^]]+)\]
대괄호를 포함하여 하나의 항목과 일치합니다. 역 참조 \1
는 일치시킬 항목을 포함합니다. 정규 표현식이 둘러보기를 지원하는 경우
(?<=\[)[^]]+(?=\])
이것은 괄호 안의 항목과 만 일치합니다.
/g
JavaScript 에서 플래그를 사용하여) 일부 정규식 맛을 명시 적으로 알려야 합니다.
일치하는 대괄호를 포함하지 않으려면 정규 표현식을 사용하십시오. (?<=\[).*?(?=\])
는 .
줄 끝을 제외한 모든 문자와 일치합니다. 는 ?=
A는 긍정적 예측 . 긍정적 인 lookahead는 특정 문자열이 뒤에 오면 문자열을 찾습니다. 는 ?<=
A는 긍정적 인 lookbehind . 긍정적 인 lookbehind는 특정 문자열이 앞에 오면 문자열을 찾습니다. 인용 이 ,
미리 긍정적으로 보아라 (? =)
표현식 B가 따르는 표현식 A를 찾으십시오.
A(?=B)
긍정적으로 보아라 (? <=)
표현식 B가 앞에 오는 표현식 A를 찾으십시오.
(?<=B)A
정규식 엔진이 lookaheads 및 lookbehinds를 지원하지 않는 경우 정규식 \[(.*?)\]
을 사용하여 그룹에서 괄호의 내부를 캡처 한 다음 필요에 따라 그룹을 조작 할 수 있습니다.
괄호는 그룹의 문자를 캡처합니다. 은 .*?
(당신이하지 않는 한, 줄 끝을 제외하고 괄호 사이의 모든 문자를 얻을 s
욕심없는 방식으로 플래그를 활성화).
(?<=\[).*?(?=\])
위에 주어진 설명에 따라 잘 작동합니다. 다음은 파이썬 예제입니다.
import re
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
re.search('(?<=\[).*?(?=\])', str).group()
"'formPagination_bottom',2,'Page',true,'1',null,'2013'"
[]
괄호가 아닌 대괄호 ( ) 에 관한 것 입니다.
\[(([^\]\[]+)|(?R))*+\]
물론 사용중인 언어 또는 RegEx 엔진과 관련이 있습니다.
그 이외의,
\[([^\]\[\r\n]*)\]
또는,
(?<=\[)[^\]\[\r\n]*(?=\])
탐색하기 좋은 옵션입니다.
식을 단순화 / 수정 / 탐색하려면 regex101.com의 오른쪽 상단에 설명되어 있습니다. 원하는 경우이 링크 에서 일부 샘플 입력과 어떻게 일치하는지 확인할 수도 있습니다.
jex.im은 정규 표현식을 시각화합니다.
const regex = /\[([^\]\[\r\n]*)\]/gm;
const str = `This is a [sample] string with [some] special words. [another one]
This is a [sample string with [some special words. [another one
This is a [sample[sample]] string with [[some][some]] special words. [[another one]]`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
([[][a-z \s]+[]])
위의 설명은 다음과 같습니다.
대괄호 안의 문자 []는 문자 클래스를 정의합니다. 즉, 패턴은 대괄호 안에 언급 된 문자 하나 이상과 일치해야합니다.
\ s는 공백을 지정합니다
+는 앞에서 언급 한 문자 중 하나 이상을 의미합니다.
A-Z
패턴에 추가해야합니다 ([[][a-zA-Z \s]+[]])
. \
문자열 마크 ( "및 ')로 정의하고"또는'사용법에서 백 슬래시 처리로 초보자를 혼합하는 정규식 패턴에서는 좋은 방법이라고 생각합니다 !
std::regex pattern{R"(["][a-zA-Z \s]+["])"};
R에서 다음을 시도하십시오.
x <- 'foo[bar]baz'
str_replace(x, ".*?\\[(.*?)\\].*", "\\1")
[1] "bar"
gsub(pat, "\\1", x, perl=TRUE)
어디에 있습니까 pat
?
first 와 last 사이의 [
]
하위 문자열을 일치시키기 위해 사용할 수 있습니다
\[.*\] # Including open/close brackets
\[(.*)\] # Excluding open/close brackets (using a capturing group)
(?<=\[).*(?=\]) # Excluding open/close brackets (using lookarounds)
정규식 데모 와 정규식 데모 # 2를 참조하십시오 .
가장 가까운 대괄호 사이에서 문자열을 일치 시키려면 다음 표현식을 사용하십시오 .
괄호 포함 :
\[[^][]*]
-PCRE , Python re
/ regex
, .NET, Golang, POSIX (grep, sed, bash)\[[^\][]*]
-ECMAScript (자바 스크립트, C ++ std::regex
, VBA RegExp
)\[[^\]\[]*]
-자바 정규식\[[^\]\[]*\]
-Onigmo (루비, 어디서나 괄호를 피해야 함)괄호 제외 :
(?<=\[)[^][]*(?=])
-PCRE, Python re
/ regex
, .NET (C # 등), ICU (R stringr
), JGSoft 소프트웨어\[([^][]*)]
- 배쉬 , Golang는 - 캡처 아래 참조 또한, 이스케이프 괄호 한 쌍의 대괄호 사이의 내용을\[([^\][]*)]
- 자바 스크립트 , C ++std::regex
, VBARegExp
(?<=\[)[^\]\[]*(?=])
-자바 정규식(?<=\[)[^\]\[]*(?=\])
-Onigmo (루비, 어디서나 괄호를 피해야 함)참고 : *
0 개 이상의 문자 +
와 일치하고 결과 목록 / 배열에서 빈 문자열 일치를 피하려면 1 이상을 일치시키는 데 사용하십시오.
두 가지 둘러보기 지원을 사용할 수있을 때마다 위의 솔루션은 이들을 사용하여 선행 / 트레일 링 열기 / 닫기 브래킷을 제외합니다. 그렇지 않으면 캡처 그룹에 의존합니다 (일부 언어의 가장 일반적인 솔루션에 대한 링크가 제공됨).
중첩 된 괄호 와 일치해야하는 경우 정규식 의 솔루션이 균형 괄호 스레드와 일치 하고 둥근 괄호를 사각형으로 대체하여 필요한 기능을 얻을 수 있습니다. 열기 / 닫기 대괄호를 제외한 내용에 액세스하려면 캡처 그룹을 사용해야합니다.
\[((?:[^][]++|(?R))*)]
- PHP PCRE\[((?>[^][]+|(?<o>)\[|(?<-o>]))*)]
- .NET 데모\[(?:[^\]\[]++|(\g<0>))*\]
- Onigmo (루비) 데모
[^]]
은 욕심 (?
) 보다 빠르며 욕심을 지원하지 않는 정규식 풍미와 함께 작동합니다. 그러나 탐욕스럽지 않은 것이 더 좋아 보입니다.