Eu tenho uma expressão regex que estou usando para localizar todas as palavras em um determinado bloco de conteúdo, sem distinção entre maiúsculas e minúsculas, que estão contidas em um glossário armazenado em um banco de dados. Aqui está meu padrão:
/($word)/i
O problema é que, se eu usar /(Foo)/i
palavras como Food
obter correspondência. Deve haver um espaço em branco ou um limite de palavra em ambos os lados da palavra.
Como posso modificar minha expressão para corresponder apenas à palavra Foo
quando é uma palavra no início, meio ou final de uma frase?
regex
word-boundary
Aaron
fonte
fonte
\b(<|>=)\b
não corresponde>=
\b[-|+][0-9]+\b
jogo+10
em43E+10
. Ambos eu não quero.Para corresponder a qualquer palavra inteira, você usaria o padrão
(\w+)
Supondo que você esteja usando PCRE ou algo semelhante:
Captura de tela acima tirada deste exemplo ao vivo: http://regex101.com/r/cU5lC2
Combinando qualquer palavra inteira na linha de comando com
(\w+)
Eu vou estar usando o shell interativo phpsh no Ubuntu 12.10 para demonstrar a motor PCRE regex através do método conhecido como preg_match
Inicie o phpsh, coloque algum conteúdo em uma variável, combine na palavra.
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
O método preg_match utilizado o motor PCRE dentro da linguagem PHP para analisar variáveis:
$content1
,$content2
e$content3
com o(\w)+
padrão.$ content1 e $ content2 contêm pelo menos uma palavra, $ content3 não.
Combine uma série de palavras literais na linha de comando com
(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
as variáveis gun1 e gun2 contêm o string dart ou fart. gun4 não. No entanto, pode ser um problema procurar por
fart
correspondências de palavrasfarty
. Para corrigir isso, aplique limites de palavras no regex.Combine palavras literais na linha de comando com limites de palavras.
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
Portanto, é o mesmo que o exemplo anterior, exceto que a palavra
fart
com um\b
limite de palavra não existe no conteúdo:farty
.fonte
O uso
\b
pode produzir resultados surpreendentes. Seria melhor você descobrir o que separa uma palavra de sua definição e incorporar essa informação em seu padrão.#!/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"; }
Resultado:
fonte
use limites de palavras \ b,
O seguinte (usando quatro escapes) funciona em meu ambiente: Mac, safari versão 10.0.3 (12602.4.8)
var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)
fonte
Para aqueles que desejam validar um Enum em seu código, você pode seguir o guia
No Regex World você pode usar
^
para iniciar uma string e$
finalizá-la. Usá-los em combinação com|
pode ser o que você deseja:^(Male)$|^(Female)$
Ele retornará verdadeiro apenas para
Male
ouFemale
caso.fonte
^
e$
corresponder ao início (respectivamente ao final) de uma linha, portanto, seu exemplo corresponderia apenas se essas fossem as únicas palavras na linha.Se você estiver fazendo isso no Notepad ++
[\w]+
Fornece a palavra inteira e você pode adicionar parênteses para obtê-la como um grupo. Exemplo:
conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)
. Eu gostaria de mudarLeakyReLU
para sua própria linha como um comentário e substituir a ativação atual. No notepad ++, isso pode ser feito usando o seguinte comando find:([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)
e o comando de substituição torna-se:
\1\2'relu'\4 \n # \1 = LeakyReLU\(alpha=a\)\(\1\)
Os espaços são para manter a formatação correta no meu código. :)
fonte
Pegue todas as "palavras" em uma string
/([^\s]+)/g
fonte