[regex] 단어 또는 접두사와 일치하는 정규식

전체 단어에 대해 정규식을 일치시키고 싶습니다.

다음 예에서 나는 일치하는 것을 시도하고있다 s또는 season그러나 나는 성냥을 가지고있는 s, e, a, on.

[s|season]

전체 단어와 일치하는 정규식을 어떻게 만듭니 까?



답변

대괄호는 문자 클래스에 대한 의미하며, 실제로 중 하나를 일치하려는 : s, |, s(다시), e, a, s(다시), on.

그룹화에 대신 괄호를 사용하십시오.

(s|season)

또는 비 캡처 그룹 :

(?:s|season)

참고 : 캡처되지 않은 그룹은 일치 항목을 저장할 필요가 없다고 엔진에 알리고 다른 그룹 (캡처 그룹은 수행함)을 저장합니다. 작은 물건의 경우, ‘무거운 의무’물건의 경우 일치가 필요한지 여부를 먼저 확인하고 싶을 수 있습니다. 그렇지 않은 경우 사용할 필요가없는 항목을 저장하는 대신 비 캡처 그룹을 사용하여 계산에 더 많은 메모리를 할당하는 것이 좋습니다.


답변

이 라이브 온라인 예제를 사용하여 패턴을 테스트하십시오.

여기에 이미지 설명 입력

이 라이브 예제에서 가져온 위의 스크린 샷 : https://regex101.com/r/cU5lC2/1

명령 줄의 모든 단어와 일치합니다.

Ubuntu 12.10 에서 phpsh 대화 형 셸 을 사용하여 preg_match 라는 방법을 통해 PCRE 정규식 엔진 을 시연 할 것입니다.

phpsh를 시작하고 일부 내용을 변수에 넣고 단어와 일치시킵니다.

el@apollo:~/foo$ phpsh

php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'

php> echo preg_match('(\w+)', $content1);
1

php> echo preg_match('(\w+)', $content2);
1

php> echo preg_match('(\w+)', $content3);
0

는 preg_match 방법 변수를 분석 PHP 언어 내의 PCRE 엔진을 사용했을 때 $content1, $content2$content3(\w)+패턴.

$ content1 및 $ content2에는 하나 이상의 단어가 포함되어 있지만 $ content3에는 포함되지 않습니다.

단어 현상금없이 명령 줄의 특정 단어와 일치

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(dart|fart)', $gun1);
1

php> echo preg_match('(dart|fart)', $gun2);
1

php> echo preg_match('(dart|fart)', $gun3);
1

php> echo preg_match('(dart|fart)', $gun4);
0

변수 gun1gun2문자열을 포함 dart하거나 fart맞지만 gun3에 포함되어 darty있고 여전히 일치하는 것이 문제입니다. 다음 예제로 넘어갑니다.

명령 줄의 특정 단어를 단어 경계와 일치 :

단어 경계는와 강제 일치시킬 수 있습니다 \b. 다음을 참조하십시오.
jex.im/regulex에서 wordboundary가 수행하는 작업에 대한 시각적 분석

http://jex.im/regulexhttps://github.com/JexCheng/regulex 에서 얻은 Regex Visual Image 예 :

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0

php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0

\b우리가 반드시 “다트”를 만들고, 단어 경계가 일치하지만, “DARTY”가 아니라고 주장한다.


답변

js에서 예제를 테스트합니다. 가장 간단한 해결책-/ / 안에 필요한 단어를 추가하십시오.

var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result

이제 다른 기호 문자가 아닌 경계가있는이 특정 단어가 필요하면. b 마커를 사용 합니다.

var reg = /\bcat\b/
reg.test('acatb');//1 test 
false // result
reg.test('have cat here');//2 test
true // result

객체 결과를 반환하는 js에는 exec () 메서드도 있습니다. fg가 우리 단어의 장소 / 색인에 대한 정보를 얻는 데 도움이됩니다.

var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5

문자열 / 문장 / 텍스트에서 일치하는 모든 단어를 가져와야하는 경우 g 수정 자 (전역 일치)를 사용할 수 있습니다.

"cat good cat good cat".match(/\bcat\b/g).length
// 3 

이제 마지막 하나-특정 단어 하나가 필요하지 않지만 일부는 필요합니다. 우리는 사용 | 기호는 선택 / 또는을 의미합니다.

"bad dog bad".match(/\bcat|dog\b/g).length
// 1


답변

[ ]문자 클래스를 정의합니다. 그래서 거기에 설정 한 모든 캐릭터가 일치합니다. [012]일치 0하거나 1또는 2[0-2]동일하게 동작합니다.

원하는 것은 or- 문을 정의하기위한 그룹화입니다. (s|season)문제에 사용하십시오 .

Btw. 조심해야합니다. 일반 정규식 (또는 그룹 내부)의 메타 문자는 문자 클래스와 다릅니다. 문자 클래스는 하위 언어와 같습니다. 또는 [$A]만 일치 합니다. 달러를 위해 여기서 탈출하지 마십시오.$A


답변