Quero combinar uma expressão regular em uma palavra inteira.
No exemplo a seguir Eu estou tentando corresponder s
ou season
mas o que tenho partidas s
, e
, a
, o
e n
.
[s|season]
Como faço uma expressão regular para corresponder a uma palavra inteira?
regex
expression
word
NMGod
fonte
fonte
(season|s)
lugar.[season]
corresponde a qualquer ums
,e
,a
,o
,n
.Respostas:
Colchetes são voltados para classe de personagem, e você está realmente tentando corresponder a qualquer um dos seguintes:
s
,|
,s
(de novo),e
,a
,s
(de novo),o
en
.Use parênteses em vez de agrupar:
ou grupo de não captura:
Nota: Grupos de não captura informam ao mecanismo que ele não precisa armazenar a correspondência, enquanto o outro (grupo de captura precisa). Para coisas pequenas, ou funciona, para coisas 'pesadas', você pode querer ver primeiro se precisa ou não do fósforo. Caso contrário, é melhor usar o grupo de não captura para alocar mais memória para cálculos em vez de armazenar algo que você nunca precisará usar.
fonte
?:
interior de um agrupamento akanon-capturing
apenas diz que você não pode usar as expressões combinadas com$1
,$2
e assim por diante ... Se você quiser que uma expressão não seja correspondida, o que você precisa é^
.(?! ... )
insead, ou seja(?!s|season)
, neste caso.Use este exemplo online ao vivo para testar seu padrão:
Captura de tela acima tirada deste exemplo ao vivo: https://regex101.com/r/cU5lC2/1
Combinando qualquer palavra inteira na linha de comando.
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 com a palavra.
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.
Corresponde a palavras específicas na linha de comando sem recompensas de palavras
Variáveis
gun1
egun2
contêm a stringdart
ou ofart
que está correto, mas gun3 contémdarty
e ainda corresponde, esse é o problema. Então, para o próximo exemplo.Combine palavras específicas na linha de comando com limites de palavras:
Os limites de palavras podem ser forçados a corresponder
\b
, consulte:Imagem visual Regex adquirida de http://jex.im/regulex e https://github.com/JexCheng/regulex Exemplo:
O
\b
afirma que temos um limite de palavra, garantindo que "dardo" corresponda, mas "dardo" não.fonte
Eu testo exemplos em js. Solução mais simples - basta adicionar a palavra que você precisa dentro de / /:
Agora, se vc precisar desta palavra específica com limites, não dentro de quaisquer outras letras-signos. Usamos o marcador b :
Temos também o método exec () em js, que retorna o resultado do objeto. Ajuda o fg a obter informações sobre o local / índice da nossa palavra.
Se precisarmos obter todas as palavras correspondentes em string / frase / texto, podemos usar o modificador g (correspondência global):
Agora o último - não preciso de uma palavra específica, mas de algumas delas. Nós usamos | sinal, significa escolha / ou.
fonte
[ ]
define uma classe de personagem. Portanto, todos os caracteres que você definir lá serão correspondentes.[012]
corresponderá a0
ou1
ou2
e[0-2]
se comportará da mesma forma.O que você quer é agrupamentos para definir uma instrução ou. Usar
(s|season)
para o seu problema.Btw. você tem que tomar cuidado. Metacaracteres em regex normal (ou dentro de um agrupamento) são diferentes da classe de caracteres. Uma classe de personagem é como um sub-idioma.
[$A]
vai apenas corresponder$
ouA
, nada mais. Não há como escapar aqui pelo dólar.fonte