문제

데이터베이스에 저장된 용어집에 포함 된 주어진 컨텐츠 블록 인 Case Insensitive에서 모든 단어를 찾기 위해 사용하는 Regex 표현이 있습니다. 내 패턴은 다음과 같습니다.

/($word)/i

문제는 내가 사용하는 경우입니다 /(Foo)/i 그런 다음 단어와 같은 단어 Food 일치하십시오. 단어의 양쪽에 공백 또는 단어 경계가 필요합니다.

단어 만 일치하도록 표현식을 어떻게 수정할 수 있습니까? Foo 문장의 시작, 중간 또는 끝에 단어가있을 때?

도움이 되었습니까?

해결책

단어 경계 사용 :

/\b($word)\b/i

또는 Sinan ünür의 예에서와 같이 "Specter"를 찾고있는 경우 :

/(?:\W|^)(\Q$word\E)(?:\W|$)/i

다른 팁

전체 단어와 일치하려면 패턴을 사용합니다. (\w+)

PCRE 또는 유사한 것을 사용한다고 가정합니다.

enter image description here

이 라이브 예에서 가져온 스크린 샷 위 : http://regex101.com/r/cu5lc2

Commandline의 모든 단어와 일치합니다 (\w+)

나는 그것을 사용할 것이다 PHPSH 대화식 쉘 ~에 우분투 12.10 시연하기 위해 PCRE Regex 엔진 알려진 방법을 통해 preg_match

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

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은 그렇지 않습니다.

Commandline의 여러 문자 단어를 (dart|fart)

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'farty 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에는 문자열 다트 또는 방귀가 포함됩니다. Gun4는 그렇지 않습니다. 그러나 단어를 찾는 것은 문제 일 수 있습니다. fart 성냥 farty. 이 문제를 해결하려면 Regex에서 단어 경계를 시행하십시오.

명령 선의 문자 단어를 단어 경계와 일치시킵니다.

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'farty 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

그래서 그것은 단어를 제외하고는 이전 예와 동일합니다. fart a \b 내용에는 단어 경계가 없습니다. farty.

사용 \b 놀라운 결과를 얻을 수 있습니다. 단어를 정의에서 분리하는 것을 알아 내고 해당 정보를 패턴에 통합하는 것이 좋습니다.

#!/usr/bin/perl

use strict; use warnings;

use re 'debug';

my $str = 'S.P.E.C.T.R.E. (Special Executive for Counter-intelligence,
Terrorism, Revenge and Extortion) is a fictional global terrorist
organisation';

my $word = 'S.P.E.C.T.R.E.';

if ( $str =~ /\b(\Q$word\E)\b/ ) {
    print $1, "\n";
}

산출:

Compiling REx "\b(S\.P\.E\.C\.T\.R\.E\.)\b"
Final program:
   1: BOUND (2)
   2: OPEN1 (4)
   4:   EXACT  (9)
   9: CLOSE1 (11)
  11: BOUND (12)
  12: END (0)
anchored "S.P.E.C.T.R.E." at 0 (checking anchored) stclass BOUND minlen 14
Guessing start of match in sv for REx "\b(S\.P\.E\.C\.T\.R\.E\.)\b" against "S.P
.E.C.T.R.E. (Special Executive for Counter-intelligence,"...
Found anchored substr "S.P.E.C.T.R.E." at offset 0...
start_shift: 0 check_at: 0 s: 0 endpos: 1
Does not contradict STCLASS...
Guessed: match at offset 0
Matching REx "\b(S\.P\.E\.C\.T\.R\.E\.)\b" against "S.P.E.C.T.R.E. (Special Exec
utive for Counter-intelligence,"...
   0           |  1:BOUND(2)
   0           |  2:OPEN1(4)
   0           |  4:EXACT (9)
  14      |  9:CLOSE1(11)
  14      | 11:BOUND(12)
                                  failed...
Match failed
Freeing REx: "\b(S\.P\.E\.C\.T\.R\.E\.)\b"

단어 경계 사용 b,

내 환경에서 다음 (네 가지 탈출 사용)은 Mac, Safari 버전 10.0.3 (12602.4.8)에서 작동합니다.

var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)

메모장 ++에서 수행하는 경우

[\w]+ 

전체 단어를 제공하고 괄호를 추가하여 그룹으로 얻을 수 있습니다. 예시: conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs). 나는 움직이고 싶다 LeakyReLU 주석으로 자체 라인으로, 현재 활성화를 대체하십시오. 메모장 ++에서는 다음을 찾기 명령을 사용하여 수행 할 수 있습니다.

([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)

대체 명령은 다음과 같습니다.

\1\2'relu'\4 \n    # \1 = LeakyReLU\(alpha=a\)\(\1\)

공간은 내 코드에서 올바른 형식을 유지하는 것입니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top