Latest web development tutorials

Expressões Regulares - regras de correspondência

correspondência padrão básico

Tudo começa com o básico. Padrão é uma expressão regular é os elementos mais básicos, que são caracterizados por uma cadeia de descrição grupo de personagens. Modo pode ser muito simples, consistindo de cordas normais, também pode ser muito complexo, representam muitas vezes um intervalo de caracteres com caracteres especiais, utilizadas, ou representa o contexto. Por exemplo:

^once

Este modelo contém um caractere especial ^, indicando que o padrão corresponde apenas uma vez aqueles que se inicia com a corda. Por exemplo, a cadeia padrão "once upon a time" jogo não coincide com "Era uma vez um homem de NewYork". Como tal ^ símbolo indica o início do mesmo, $ símbolos para combinar essas cadeias no fim de um determinado modo.

bucket$

O modelo e "Quem manteve todo este dinheiro em um balde" match não corresponde com os "baldes". ^ E $ caracteres quando usado simultaneamente, representa uma correspondência exata (modo string como). Por exemplo:

^bucket$

Corresponde apenas a string "balde". Se um modelo não inclui os ^ e $, ela contém a string para combinar com qualquer do padrão. Por exemplo: Modo

once

com corda

There once was a man from NewYork
Who kept all of his cash in a bucket.

Match.

Letras (uma vez) neste modo é um caractere literal, ou seja, eles disseram que a carta em si, a figura é a mesma. Alguns outros personagens um pouco mais complexas, tais como sinais de pontuação e caracteres em branco (espaços, tabulações, etc.), use a seqüência de escape. Todas as sequências de escape começam com uma barra invertida (\). Tabs escapar seqüência é: \ t. Portanto, se queremos para testar se uma string que começa com um guia, você pode usar este modo:

^\t 

Da mesma forma, representado por \ n "nova linha", \ r retorno de carro. Outros símbolos especiais pode ser utilizado em frente de uma barra invertida, tal como a própria barra invertida com \\ referido período. Com \. Representação, e assim por diante.

conjunto de caracteres

Programa em INTERNET, a expressão regular é muitas vezes usado para validar a entrada do usuário. Quando um usuário envia um formulário, em seguida, digite o número de telefone que deseja julgar, endereço, endereço de email, número de cartão de crédito é válido, com o caráter geral com base no literal não é suficiente.

Assim, para usar um modelo mais livre para descrever a nossa abordagem, são os grupos de caracteres. Para criar uma representação de caracteres de todos os cluster de vogal, colocar tudo o personagem vogal de colchetes:

[AaEeIiOoUu]

Esse padrão corresponde a quaisquer caracteres de vogais, mas representam apenas um personagem. Com um hífen pode representar uma gama de caracteres, tais como:

[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符

Da mesma forma, estes representam apenas um personagem, isso é muito importante. Se você quer combinar uma letra minúscula e um por um seqüência de números, como "Z2", "t6" ou "g7", mas não "Ab2", "r2d3" ou "b52", em seguida, usar esse padrão:

^[a-z][0-9]$

Embora o [az] em nome das 26 letras do intervalo, mas aqui é apenas o primeiro caractere é strings minúsculas.

Como mencionado anteriormente ^ representa o início da cadeia, mas também tem outro significado. Quando usado em um conjunto de colchetes ^ é que ele significa "não" ou meios "exclusão", muitas vezes usado para eliminar um carácter. Também usar o exemplo anterior, pedimos primeiro carácter não pode ser um número:

^[^0-9][0-9]$

Este modo de "5 &", "G7" e "-2" é compensada, mas com o "12", "66" não é um jogo. Aqui estão alguns exemplos de excluir caracteres específicos:

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

caractere especial "." (Dot, ponto final) na expressão regular usada para representar a adição à "nova linha" de todos os personagens. Assim, o padrão "^ 0,5 $" e quaisquer dois caracteres para o final do número 5 e a seqüência de partida em outro personagem não "nova linha" no início do. Mode. "" Pode corresponder a qualquer cadeia, além da cadeia vazia, e inclui apenas uma "string nova linha".

expressão regular PHP tem alguns built-in de cluster de caráter universal, a lista é a seguinte:

字符簇 描述
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

OK repetido

Até agora, você já sabe como combinar uma letra ou número, mas mais casos, você pode querer combinar uma palavra ou um conjunto de números. A palavra tem um número de letras, um grupo de várias figuras em número ímpar. Com o carácter ou caracteres por trás do conjunto de chaves ({}) usado para determinar o número de repetições do conteúdo anterior.

字符簇 描述
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 两个制表符
.{2} 所有的两个字符

Estes exemplos descrevem o uso de três diferentes chaves. Um número, {x} significa "o personagem ou personagens na frente do cluster só aparece x vezes", um número vírgula, {x,} significa "o conteúdo aparece na frente do número de vezes que x ou mais"; dois com separados por vírgula números, {x, y} que "o conteúdo na frente de pelo menos parecem x vezes, mas não mais do que os tempos y". Podemos estender o modelo para mais palavras ou números:

^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$ //所有的正数 
^\-{0,1}[0-9]{1,}$ //所有的整数 
^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数

O último exemplo não é bem compreendida, não é? Assim Kanba: (? [-]) (. \) E todos com um sinal de menos opcional No início (^), seguido de um ou mais dígitos ([0-9] +), e um ponto decimal Discussão em um ou mais dígitos ([0-9] +), e não é seguida por qualquer outra coisa ($). Abaixo, você vai saber mais simples método pode ser usado.

"?" E caracteres especiais {0,1} são iguais, eles representam: "0 ou 1 na frente 'ou' em frente ao conteúdo é opcional." Então apenas exemplos pode ser simplificada como:

^\-?[0-9]{1,}\.?[0-9]{1,}$

Os caracteres especiais "*" e {0,} são iguais, todos eles representam o "0 ou mais do conteúdo anterior." Finalmente, os caracteres "+" e {1} são iguais, isso indica "um ou mais do conteúdo anterior", de modo que os quatro exemplos acima pode ser escrita como:

^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 
^[0-9]+$ //所有的正数 
^\-?[0-9]+$ //所有的整数 
^\-?[0-9]*\.?[0-9]*$ //所有的浮点数

Claro, isso não fundamentalmente reduzir a complexidade técnica de expressões regulares, mas pode torná-los mais fáceis de ler.