답변:
대괄호는 문자 클래스에 대한 의미하며, 실제로 중 하나를 일치하려는 : s
, |
, s
(다시), e
, a
, s
(다시), o
과 n
.
그룹화에 대신 괄호를 사용하십시오.
(s|season)
또는 비 캡처 그룹 :
(?:s|season)
참고 : 캡처되지 않은 그룹은 일치 항목을 저장할 필요가 없다고 엔진에 알리고 다른 그룹 (캡처 그룹은 수행함)을 저장합니다. 작은 물건의 경우, '무거운 의무'물건의 경우 일치가 필요한지 여부를 먼저 확인하고 싶을 수 있습니다. 그렇지 않은 경우 사용할 필요가없는 항목을 저장하는 대신 비 캡처 그룹을 사용하여 계산에 더 많은 메모리를 할당하는 것이 좋습니다.
?:
내부 일명 그룹화 non-capturing
당신이 일치하는 표현식에 사용할 수 없다는 것을 말한다 $1
, $2
및 등등 ... 당신이 표현이 일치하지 않는 것을, 당신이 필요가합니다 ^
.
(?! ... )
insead를 사용 (?!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
변수 gun1
와 gun2
문자열을 포함 dart
하거나 fart
맞지만 gun3에 포함되어 darty
있고 여전히 일치하는 것이 문제입니다. 다음 예제로 넘어갑니다.
단어 경계는와 강제 일치시킬 수 있습니다 \b
. 다음을 참조하십시오.
http://jex.im/regulex 및 https://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
(season|s)
대신 사용하십시오 .[season]
의 일치s
,e
,a
,o
,n
.