이 정규식을 사용하십시오 /^[^abc]/
. a, b 또는 c를 제외한 문자열 시작 부분의 단일 문자와 일치합니다.
*
이후에 – 를 추가하면 /^[^abc]*/
– 정규 표현식은 a
, 또는 b
, 또는을 충족 할 때까지 각 후속 문자를 결과에 계속 추가합니다 c
.
예를 들어, 소스 문자열 "qwerty qwerty whatever abc hello"
을 사용하면 표현식이 최대와 일치합니다 "qwerty qwerty wh"
.
그러나 일치하는 문자열을 원한다면 어떻게해야합니까? "qwerty qwerty whatever "
다시 말해, 정확한 순서 까지 모든 것을 어떻게 일치시킬 수 "abc"
있습니까?
답변
사용중인 정규식의 맛을 지정하지 않았지만 “완전한”것으로 간주 될 수있는 가장 인기있는 형식으로 작동합니다.
/.+?(?=abc)/
작동 원리
이 .+?
부분은 욕심없는 버전 .+
(하나 이상)입니다. 를 사용할 때 .+
엔진은 기본적으로 모든 것과 일치합니다. 그런 다음 정규 표현식에 다른 것이 있으면 다음 부분과 일치시키는 단계로 돌아갑니다. 이것은이다 욕심 의미, 행동 만족시키기 위해 가능한 한 많이 .
를 사용할 때 .+?
한 번에 모두 일치하고 다른 조건 (있는 경우)으로 돌아가는 대신 엔진은 정규식의 후속 부분이 일치 할 때까지 (다음에있는 경우) 다음 문자를 단계적으로 일치시킵니다. 이것은이다 않은 욕심 , 즉 경기를 가장 적은 수를 충족하기 위해 .
/.+X/ ~ "abcXabcXabcX" /.+/ ~ "abcXabcXabcX"
^^^^^^^^^^^^ ^^^^^^^^^^^^
/.+?X/ ~ "abcXabcXabcX" /.+?/ ~ "abcXabcXabcX"
^^^^ ^
우리가 가지고있는 것을 따라 하는 제로 폭 주장 하는 주변의 모습 . 이 그룹화 된 구성은 내용과 일치하지만 일치하는 문자 ( 너비 0 ) 로 계산되지 않습니다 . 일치하는지 아닌지 ( assertion ) 만 반환합니다 .(?=
{contents}
)
따라서 다른 용어로 정규식 /.+?(?=abc)/
은 다음을 의미합니다.
“abc”를 세지 않고 “abc”가 발견 될 때까지 가능한 한 적은 문자를 일치 시키십시오.
답변
“abc”까지 모든 것을 캡처하려는 경우 :
/^(.*?)abc/
설명:
( )
사용하여 액세스 괄호 안의 식을 캡처 $1
, $2
등
^
경기 시작
.*
?
무의미한 것과 일치 (필요한 최소 문자 수와 일치)-[1]
[1] 이것이 필요한 이유는 다음 문자열에서 그렇지 않기 때문입니다.
whatever whatever something abc something abc
기본적으로 정규 표현식은 욕심이 많으 므로 가능한 한 많이 일치합니다. 따라서 /^.*abc/
“무엇이든지 무엇인가 abc”와 일치합니다. 욕심없는 수량자를 추가하면 ?
정규식은 “무엇이든”일치합니다.
답변
@Jared Ng와 @Issun이 지적했듯이 “특정 단어 나 하위 문자열에 모두 일치”또는 “특정 단어 나 하위 문자열에 일치하는 모든 것”과 같은 이러한 종류의 RegEx를 해결하는 열쇠는 “전후”길이가 0 인 어설 션이라고합니다. . 자세한 내용은 여기를 참조하십시오.
당신의 특별한 경우에, 그것은 긍정적 인 전망으로 해결할 수 있습니다 : .+?(?=abc)
그림은 천 단어의 가치가 있습니다. 스크린 샷에서 자세한 설명을 참조하십시오.
답변
필요한 것은 assertion과 같은 것 .+? (?=abc)
입니다.
참조 : Lookahead 및 Look-hind Zero-Length Assertions
그주의 [abc]
와 동일하지 않습니다 abc
. 괄호 안에는 문자열이 아닙니다-각 문자는 가능성 중 하나입니다. 괄호 밖에서는 문자열이됩니다.
답변
Java의 정규 표현식의 경우 대부분의 정규식 엔진에서도 믿습니다. 마지막 부분을 포함하려면 다음과 같이하십시오.
.+?(abc)
예를 들어,이 줄에서 :
I have this very nice senabctence
“abc”까지 모든 문자를 선택하고 abc도 포함
정규식을 사용하면 결과는 다음과 같습니다. I have this very nice senabc
이것을 테스트하십시오 : https://regex101.com/r/mX51ru/1
답변
내 문제를 해결하는 데 도움을 찾은 후에이 stackoverflow 질문으로 끝났지 만 해결책을 찾지 못했습니다.
그래서 나는 곧 정규식에 도달했을 때 즉흥적으로해야했습니다.
보시다시피, 마지막 대시를 포함하지 않고 “grp-bps”폴더 앞에 하나의 폴더가 필요했습니다. 그리고 “grp-bps”폴더 다음에 하나 이상의 폴더가 있어야했습니다.
편집하다
복사하여 붙여 넣기를위한 텍스트 버전 (텍스트의 ‘grp-bps’변경) :
.*\/grp-bps\/[^\/]+
답변
이것은 정규식에 의미가 있습니다.
- 정확한 단어는 다음 regex 명령에서 얻을 수 있습니다.
(“(.*?)”)/지
여기서 큰 따옴표 안에 속하는 정확한 단어를 전역 적으로 얻을 수 있습니다. 예를 들어 검색 텍스트가
이것은 “큰 따옴표”단어에 대한 예입니다
그러면 우리는 그 문장에서 “큰 따옴표”를 얻을 것입니다.