Regex modificadores em PHP PHP Expressões Regulares - Parte V Introdução Matching é sensível a maiúsculas. Você pode não saber se o que você está procurando é em letra minúscula ou maiúscula ou tem misturado casos. É possível para que você faça uma correspondência não. Você precisa o que é chamado um modificador para isso. Há um bom número de modificadores e cada um tem sua própria finalidade. Vamos aprender alguns deles nesta parte da série. O i Modifier Por padrão, a correspondência é sensível a maiúsculas.
Para torná-lo insensível caso, você tem que usar o que é chamado o modificador i. Então, se temos a regex, /enviar /e, em seguida, nós também temos $ subject = "Clique no botão Enviar." o código a seguir não vai produzir um jogo: $ subject = "Clique no botão Enviar."; $ subject = "Clique no botão Enviar."; if (preg_match ("/enviar /", $ assunto)) echo "Matched". "Else echo" Não Matched "."?> O regex não combinar com a seqüência de assunto, porque a regex tem "enviar", onde S é em letras minúsculas, mas a seqüência de assunto tem "Enviar", onde S é em maiúsculas.
Se você quer esta correspondência a ser maiúsculas e minúsculas, então o seu regex vai ter que ser /enviar /i Observe o i apenas após a segunda barra. É o modificador i. O código a seguir irá produzir um jogo. $ subject = "Clique no botão Enviar."; if (preg_match ("/envio /i", $ assunto)) echo "Matched". "Else echo" Não Matched "."?> Matching ocorreu porque fizemos o caso regex insensível, com o modificador i. Matching mundial É possível para que você tenha mais de uma sub seqüência na cadeia de assunto que iria corresponder a regex.
Por padrão, apenas o primeiro sub seqüência de caracteres no assunto é correspondida. Para corresponder a todas as sub strings no assunto, você tem que usar o preg_match_all () function. Esta é a sintaxe: int preg_match_all (string $ pattern, string $ assunto, array & $ matches [, int $ flags]) O primeiro argumento é o regex. A segunda é o assunto. A terceira é a matriz, que contém todas as partidas. É uma matriz bidimensional, aqui (para a função preg_match () é uma matriz unidimensional). O quarto argumento é opcional. Vamos falar apenas sobre uma bandeira para este argumento.
Considere a seguinte seqüência de assunto: $ subject = "Um gato é um animal Um rato é um animal Um morcego é uma criatura..."; No assunto acima, você tem as sub strings: gato, rato e morcego. Você tem gato em primeiro lugar, em seguida, rato e, em seguida, morcego. Cada uma destas sub cordas coincidir com o seguinte regex: /[cbr] at /Este padrão irá corresponder apenas o sub primeira corda, "gato". Se você quiser "gato" e "rato" e "bastão" para ser correspondido, você tem que usar a função preg_match_all () como o código a seguir ilustra: $ subject = "Um gato é um animal Um rato é um animal A.
. morcego é uma criatura. "; if (preg_match_all ("/[CBR] na /", $ assunto, $ partidas, PREG_PATTERN_ORDER)) echo "Matched". "Else echo" Não Matched "." Echo "echo $ matches [0] [0]." Echo $ matches [0] [1]. "Echo $ matches [0] [2]."?> O último argumento na função preg_match_all () é uma bandeira. Vamos voltar a ela em breve. Os primeiro, segundo e terceiro elementos da primeira matriz da matriz bidimensional são "cat", "rato" e "bastão". Então, a saída do código acima é: Matched gato rato bat Agora, a matriz bidimensional fornece duas matrizes no código.
A primeira matriz recebe os sub strings correspondentes, na ordem em que os sub cordas foram vistos no assunto. Esta é a harmonização global. A bandeira PREG_PATTERN_ORDER Com esta bandeira, os resultados são de tal forma que, $ matches [0] é uma matriz de pleno padrão corresponde, $ matches [1] é um array de strings combinadas pelo primeiro subpadrão, e assim por diante. Os S e M modificadores O s modificador refere-se a uma única linha eo modificador m refere-se a várias linhas em uma corda. Normalmente, sem esses modificadores, nós conseguimos o que queremos.
Às vezes, porém, queremos manter o controle de \\ n caracteres. Um arquivo no disco rígido pode ser feita de muitas linhas de texto cada um terminando com o caractere \\ n. Por padrão, a âncora ^ e $ caracteres no início e no fim da cadeia sendo usada. Podemos torná-los ancorar o início eo final das linhas. Os s e m modificadores afetam a interpretação do ^, $ e o metahcaracter ponto. Aqui está a descrição completa das S e M * modificadores não modificadores: Aqui olhamos para o caso onde não há modificador apenas após a segunda barra. Sob esta condição '.
' corresponde a qualquer caractere, exceto "\\ n". ^ Corresponde apenas no início da string e $ corresponde apenas no final seqüência de assunto ou antes \\ n no final. Este é o comportamento padrão do metacaractere ponto. * S modificador: Isso faz com que a seqüência sujeito se comporta como uma linha longa independente de qualquer caractere de nova linha que podem estar lá. Assim '.' corresponde a qualquer caractere, mesmo "\\ n". ^ Corresponde apenas no início da string e $ corresponde apenas no final da seqüência de assunto ou antes \\ n.
* M modificador: Isso faz com que a seqüência sujeito se comporta como um conjunto de várias linhas. Na seqüência de assunto, linhas consecutivas são separados pelo caractere \\ n. Assim '.' corresponde a qualquer caractere, exceto "\\ n". Desta forma ^ e $ são capazes de igualar no início ou no final de uma linha dentro da cadeia assunto. Aqui, ^ corresponde ao início da cadeia ou apenas após o caráter n \\, enquanto $ corresponde a apenas antes do caractere \\ n. Vamos usar exemplos para ilustrar as três condições acima. Nós começar por olhar para a primeira condição.
Não modificadores Leia o primeiro ponto acima novamente. Considere a seguinte seqüência de assunto de várias linhas: $ subject = "A primeira frase \\ n A segunda frase \\ n A terceira frase \\ n..."; A seqüência de assunto tem três linhas. A expressão a seguir produz uma partida. preg_match ("/segundo /", $ assunto) O sub string "segunda", na segunda linha (frase) é correspondida. Considere o seguinte padrão: /^.*$/Este padrão (regex) é esperado em circunstâncias normais, para coincidir com a corda toda. Vamos ver se ele faz isso com a seqüência de assunto multi-linha acima.
Considere o seguinte código: $ subject = "A primeira frase \\ n A segunda frase \\ n A terceira frase \\ n..."; if (preg_match ("/^.*$/", $ assunto)) echo "Matched". "Else echo" Não Matched "."?> Se você executar esse código, nenhuma correspondência ocorrerá. Isto é devido à presença do carácter \\ N na cadeia de assunto. Por padrão, a classe ponto não coincide com o caractere \\ n. Espero que agora você apreciar o que o primeiro ponto acima está falando. s modificador Leia o segundo ponto acima novamente. Vamos fazer uma coisa semelhante que fizemos antes.
Considere a seguinte seqüência de assunto: $ subject = "A primeira frase \\ n A segunda frase \\ n A terceira frase \\ n..."; A seqüência de assunto tem três linhas. A expressão a seguir produz uma partida. preg_match ("/segundo /s", $ assunto) Note-se que o modificador s foi usado. O sub string "segunda", na segunda linha (frase) é correspondida. Considere o seguinte padrão: /^.*$/s Este padrão (regex) é suposto para coincidir com a corda toda. Vamos ver se ele faz isso com a seqüência de assunto multi-linha acima.
Considere o seguinte código: $ subject = "A primeira frase \\ n A segunda frase \\ n A terceira frase \\ n..."; if (preg_match ("/^.*$/s", $ assunto)) echo "Matched". "Else echo" Não Matched "."?> Uma partida é produzido. Isto porque, com o modificador s, o ponto (classe) combina com o caractere de nova linha. Espero que agora você apreciar o que o segundo ponto acima está falando. O m Modifier Leia o terceiro ponto acima novamente. Aqui olhamos para o efeito do modificador m.
Considere a seguinte seqüência de assunto: $ subject = "A primeira frase \\ n A segunda frase \\ n A terceira frase \\ n..."; A seqüência de assunto tem três linhas. A expressão a seguir produz uma partida. preg_match ("/segundo /m", $ assunto) Note-se que o modificador m foi usado. O sub string "segunda", na segunda linha é correspondida. Considere o seguinte padrão: /(^.*$)/m Com o m modificador, este padrão (regex) deve corresponder apenas uma linha. Vamos ver se ele faz isso com a seqüência de assunto multi-linha acima.
Considere o seguinte código: $ subject = "A primeira frase \\ n A segunda frase \\ n A terceira frase \\ n..."; if (preg_match ("/^.*$/m", $ assunto)) echo "Matched". "Else echo" Não Matched "."?> Apenas a primeira frase é correspondida. Por isso combinava com a primeira linha. Você pode combinar e capturar todas as três frases nas três linhas. Você colocar o padrão entre parênteses (sub grupo). Você usa a função regex PHP, preg_match_all () em vez de preg_match (). Você também pode usar o PREG_PATTERN_ORDER bandeira. A matriz contendo os sub cordas capturados é uma matriz bidimensional.
Ele tem duas matrizes. O código a seguir ilustra isso: $ subject = "A primeira frase \\ n A segunda frase \\ n A terceira frase \\ n..."; if (preg_match_all ("/(^.*$)/m", $ assunto, $ corresponde, PREG_PATTERN_ORDER)) echo "Matched". "Else echo" Não Matched "." Echo "echo $ matches [0] [0]." Echo $ matches [0] [1]. "Echo $ matches [0] [2]." Echo "echo $ matches [1] [0]." Echo $ matches [1] [1]. "Echo $ matches [1] [2].">