임의의 순서로 두 개의 이름을 포함하는 문자열과 일치하도록 정규 표현
논리적이고 논리적인 AND가 필요해
비슷한 것
잭과 제임스
다음 조건에 동의하다
'안녕 잭, 제임스입니다'
'안녕 제임스입니다 잭입니다'
긍정적인 룩어헤드를 사용하여 체크할 수 있습니다.다음은 필수불가결한 regular-expressions.info의 요약입니다.
미리 보기 및 뒤보기(전체적으로 "찾기"라고 함)는 길이가 0인 어설션입니다.lookaround는 실제로는 문자와 일치하지만 그 후 일치를 포기하고 match 또는 no match 결과만 반환합니다.그것이 그들이 "주장"이라고 불리는 이유이다.문자열 내의 문자를 소비하지 않고 일치 가능 여부만 판단합니다.
그런 다음 이어지는 내용이 일치하는 표현에 있는 문자를 사용하지 않고 특정 표현과 일치한다고 주장하기 위해 긍정적인 룩어헤드가 사용된다는 것을 설명합니다.
두 개의 포스트 해서 이 가 일치한다고 입니다.jack
★★★★★★★★★★★★★★★★★」james
이치노
^(?=.*\bjack\b)(?=.*\bjames\b).*$
안에 있는 은 '아까보다'로 입니다.?=
긍정적인 외모입니다.패턴을 분석하겠습니다.
^
는 대조하는 식의 시작을 단언합니다.(?=.*\bjack\b)
이 일치해야 첫 입니다..*\bjack\b
..*
0으로 하다\b
는 임의의 단어 경계(공백, 표현의 시작, 표현의 끝 등)를 의미합니다.jack
네말 로 정렬하다).james
다음 긍정적인 전망에서)$
나에게 그 표현의 끝이 일치한다고 단언한다.
첫 에 '로 이어지는 것 )'은 0 그 뒤에 , 그 에 '뒤로 보는 것'으로 그것 자체가 룩어헤드 또는 룩어바운드는 제로 이상의 문자로 시작하는 식이어야 합니다.리리음음음음음음음음음음음음음jack
또 경계와 두 하고 그 경계 뒤에 ' 문장이든 좋다'는. "다음은 0 이상의 문자로 시작하는 식이어야 하며, 그 다음에 단어 경계로 이어지는 식이어야 합니다.james
먹다, '먹다'두 명의 룩어헤드 이후에.*
은 단순히 하며 "0"은 "0"과 "0"은 "0"과 일치합니다.$
을 사용하다
하고 그 에 잭, , 그 으로도 끝낸다'는 것은 '아무것이나'라는 개 있기 에 첫 시킵니다. 왜냐하면 단어 뒤에 많은 문자가 있기 때문입니다.jack
두 번째 에 두 jack
꼭 필요한 것은 ,, 두, 두, 두, 두, 두, ,, ), ), ), ), ), ), ), ), ), ), ), ), ), ), ), ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,james
하지 않기 에, 「예측」은 「예측」으로 되어 있습니다.*
뒤에 것은 '.'와을 넘어설 수 .
감이 잡히셨겠지만, 확실히 말씀드리자면, 여기 있는 건jack
★★★★★★★★★★★★★★★★★」james
즉 "하고 그 잭으로 그 것으로 끝납니다."라는개에 첫 이 충족됩니다.james
두 번째 에 두 james
꼭 필요한 것은 ,, 두, 두, 두, 두, 두, ,, ), ), ), ), ), ), ), ), ), ), ), ), ), ), ), ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,jack
어느 하지 않기 에, 「어느 쪽도 끝」, 「어느 쪽도 끝」, 「어느 쪽도 끝」, 「어느 쪽도 끝」이 되지 않습니다.*
뒤에 것은 '.'와을 넘어설 수 .
이 방법에는 여러 조건을 쉽게 지정할 수 있다는 장점이 있습니다.
^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b).*$
시험:
james.*jack
둘 다 동시에 원하시면or
아니다.
james.*jack|jack.*james
작성하는 명령어 설명:-
.
는 임의의.을 수 있습니다.숫자는 를 대신할 수 있습니다.
*
바로 앞에 쓰여 있는 것이 0개 이상 발생하는 것을 의미합니다.
|
'또는'을 의미합니다.
그렇게,
james.*jack
james
임의의 문자를 jack
네가 원하니까
따라서 명령어:
jack.*james|james.*jack
짧고 달콤하다
(?=.*jack)(?=.*james)
테스트 케이스:
[
"xxx james xxx jack xxx",
"jack xxx james ",
"jack xxx jam ",
" jam and jack",
"jack",
"james",
]
.forEach(s => console.log(/(?=.*james)(?=.*jack)/.test(s)) )
다음 작업을 수행할 수 있습니다.
\bjack\b.*\bjames\b|\bjames\b.*\bjack\b
이 대답의 표현은 사람을 위해 그렇게 한다.jack
1개의 ★★★★★★★★★★★★★★.james
순서를 불문하고
여기서는 다른 시나리오를 살펴보겠습니다.
1:1 법 11:1jack
하나james
을 위해, 2개의 ★★★★★★★★★★★★★★★★★★★2★jack
2개의 ★★★★★james
요, 돼요.jack
1개의 ★★★★★★★★★★★★★★.james
유효할 것 같습니다.을 사용하다
^(?!.*\bjack\b.*\bjack\b)(?!.*\bjames\b.*\bjames\b)(?=.*\bjames\b)(?=.*\bjack\b).*$
여기서는 다음 문장을 사용하여 이러한 인스턴스를 제외합니다.
(?!.*\bjack\b.*\bjack\b)
그리고.
(?!.*\bjames\b.*\bjames\b)
RegEx 데모 1
또, 이하에 대해서도 간단하게 할 수 있습니다.
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$
RegEx 데모 2
표현식을 단순화/업데이트/삭제하려면 regex101.com의 오른쪽 상단 패널에 설명되어 있습니다.관심 있는 경우 일치하는 단계를 보거나 이 디버거 링크에서 수정할 수 있습니다.디버거는 RegEx 엔진이 몇 가지 샘플 입력 문자열을 단계적으로 소비하고 일치 프로세스를 수행하는 방법을 보여줍니다.
RegEx 회선
시험
const regex = /^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$/gm;
const str = `hi jack here is james
hi james here is jack
hi james jack here is jack james
hi jack james here is james jack
hi jack jack here is jack james
hi james james here is james jack
hi jack jack jack here is james
`;
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}`);
});
}
2:1 법 22:1jack
하나james
한
은 첫 a에 할 수 있습니다.james
a then then then thenjack
과 같이
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b.*\bjack\b).*$
RegEx 데모 3
그 반대도 마찬가지입니다.
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjack\b.*\bjames\b).*$
RegEx 데모 4
regex의 수량자 기능을 사용할 수 있습니다.lookaround
는 항상 지원되지 않을 수 있습니다.
(\bjames\b){1,}.*(\bjack\b){1,}|(\bjack\b){1,}.*(\bjames\b){1,}
연산자 Vim이 .\&
단어 집합을 포함하는 행을 임의의 순서로 검색할 때 유용합니다.또한, 필수 단어 집합을 확장하는 것은 사소한 일이다.
예를들면,
/.*jack\&.*james
경우, 이 합니다.jack
★★★★★★★★★★★★★★★★★」james
사용 방법에 대한 자세한 내용은 이 답변을 참조하십시오.분기를 구현하는 다른 regex 플레이버는 알 수 없습니다.오퍼레이터는 정규 표현 위키피디아 엔트리에 기재되어 있지 않습니다.
두 개의 룩헤드가 필요하지 않으며, 하나의 서브스트링이 일반적으로 일치할 수 있습니다.
^(?=.*?\bjack\b).*?\bjames\b.*
룩어라운드는 길이가 제로인 어설션(조건)입니다.서의 예측은, 「 」를 합니다.^
만약이라면 시작하다jack
스트링의 후반부에서 발생하며 성공 시 최대james
나머지는 제거 가능.Lazydot은 단어 앞에 사용됩니다(에 포함됨).\b
단어 경계).대소문자를 무시하려면 -flag를 사용합니다.
언급URL : https://stackoverflow.com/questions/4389644/regex-to-match-string-containing-two-names-in-any-order
'source' 카테고리의 다른 글
Powershell 스크립트에서 BAT 파일을 실행하는 가장 안전한 방법 (0) | 2023.04.12 |
---|---|
텍스트 파일을 Windows 명령줄과 연결하고 선행 행을 삭제합니다. (0) | 2023.04.12 |
현재 날짜에서 7일 빼기 (0) | 2023.04.12 |
WPF MVVM 탐색 뷰 (0) | 2023.04.12 |
Objective-C의 자동 기준 계수가 방지하거나 최소화하지 못하는 누출의 종류는 무엇입니까? (0) | 2023.04.12 |