Latest web development tutorials

Expressões Regulares - Sintaxe

Regex (expressão regular) descreve um conjunto de cordas que podem ser usados ​​para verificar se uma seqüência contém um certo substring substring correspondência não substituir ou remover uma condição corresponde a uma substring de uma string e assim por diante.

  • O catálogo da coluna, dir * .txt ls * .txt ou * .txt não está em uma expressão regular, porque não é * * com expressão regular significa é diferente.
  • O método de construir uma expressão regular e criar expressões matemáticas da mesma maneira. Ou seja, usando uma variedade de metacaracteres e operadores podem combinar pequenas expressões juntas para criar expressões maiores. expressões regulares componente pode ser um único caractere, conjunto de caracteres, selecione um intervalo de caracteres, entre os personagens, ou qualquer combinação de todos estes componentes.

As expressões regulares são modo de texto consiste em caracteres comuns (como letras de A a Z) e caracteres especiais (chamados de "meta-caracteres") da mesma. descrição do modo na busca de texto para combinar uma ou mais cadeias. expressão regular como um modelo, um modo de caracteres e a cadeia de pesquisa para corresponder.

caracteres ordinários

caracteres ordinários não são explicitamente designados como metacaracteres todos os caracteres imprimíveis e não imprimíveis. Isto inclui todas as letras maiúsculas e minúsculas, todos os dígitos, toda a pontuação e outros símbolos.

caracteres não imprimíveis

caracteres não-impressão também pode ser uma parte da expressão regular. A tabela a seguir lista as seqüências de escape que representam caracteres não imprimíveis:

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

caracteres especiais

Os chamados caracteres especiais, é que alguns caracteres têm um significado especial, uma vez que diz "* .txt" in *, significa simplesmente que a representação da cadeia de qualquer significado. Se você quiser encontrar o nome do arquivo com o arquivo *, você precisa escapar da *, que é um plus na frente \. ls \ *. txt.

Muitos metacharacters requerem tratamento especial ao tentar combiná-los. Para coincidir com esses caracteres especiais, você deve primeiro fazer o personagem "escape", ou seja, a barra invertida (\) na frente deles. A tabela a seguir lista a expressão regular caracteres especiais:

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。

qualifier

Qualificador é usado para especificar a expressão regular de um determinado componente deve aparecer muitas vezes para satisfazer a partida. Lá * ou + ou? Ou {n} ou {n,} ou {n, m} com um total de seis.

expressões qualificadores regulares são:

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

Uma vez que o número do capítulo em um grande documento de entrada será provavelmente mais de nove anos, então você precisa de uma forma de lidar com dois ou três números de capítulos. Qualifier dá-lhe essa capacidade. A seguinte expressão regular corresponde a qualquer número de bits títulos dos capítulos numerados:

/Chapter [1-9][0-9]*/

Por favor note que o qualificador aparece após a expressão de intervalo. Assim, aplica-se a toda a gama de expressão, neste caso, apenas o número especificado de 0-9 (inclusive 0 e 9).

+ Qualificador não é utilizado aqui, como na segunda posição ou posição traseira não precisa necessariamente de ter um número. Nem usar? Caráter, porque limita os números de capítulo para apenas dois dígitos. Você precisa coincidir com pelo menos um número de capítulo ou espaços de volta.

Se você souber o número do capítulo é limitado a apenas 99 capítulos, você pode usar a seguinte expressão para especificar pelo menos um, mas pelo menos dois dígitos.

/Chapter [0-9]{1,2}/

A desvantagem da expressão acima é maior do que 99 capítulos ainda número corresponde apenas o início de dois dígitos. Outra desvantagem é que Capítulo 0 também irá corresponder. Melhor adequação de apenas dois dígitos de expressão é a seguinte:

/Chapter [1-9][0-9]?/

ou

/Chapter [1-9][0-9]{0,1}/

*, +, E? Qualifiers são gananciosos, porque eles correspondem a quantidade de texto, somente atrás deles, mais um? Pode ser alcançado jogo não-gananciosos ou mínima.

Por exemplo, você pode procurar documentos HTML para encontrar fechado em H1 títulos das seções tags. O texto no documento como segue:

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

Todos os conteúdos combinar as seguintes expressões a partir de menos de sinal (<) para fechar a tag H1 é maior do símbolo (>) entre.

/<.*>/

Se você só precisa combinar com o começo de tags H1, a seguinte expressão "não-gananciosos" corresponde somente <H1>.

/<.*?>/

Por *, + ou? Após o lugar qualifier? As expressões podem mudar de "gananciosos" para "não-gananciosos" ou mínima correspondência de expressão.

localizador

Locator permite a expressão regular é fixada para o início ou fim da linha. Eles também permitem que você crie uma expressão tão regular, essas expressões regulares aparecem em uma palavra, uma palavra no início ou no final de uma palavra.

Locator usado para descrever a cadeia ou limite de palavra, ^ e $ referem-se ao início e fim da cadeia, \ descrição fronteira b antes ou depois da palavra, \ B representa um non-limite de palavra.

expressões qualificadores regulares são:

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

Nota: Você não pode usar o ponto qualificador e âncora. Porque imediatamente antes ou após a embalagem ou palavra fronteiras não pode ter mais de um local, e, portanto, não permite tal expressão como ^ *.

Para corresponder a uma linha de texto no início do texto, por favor, começar a usar a expressão n ^ personagem. ^ Não use este uso a expressão entre parênteses dentro da confusão.

Para corresponder texto no final de uma linha de texto, ver o fim da expressão usando $ caracteres na positivo.

Para usar os títulos de seção na busca quando o ponto de ancoragem, a seguinte expressão regular corresponde a um título do capítulo, o título contém apenas dois seguido de um número, e o início da linha:

/^Chapter [1-9][0-9]{0,1}/

títulos dos capítulos verdadeiros aparecem apenas no início da linha, mas é o único texto na linha. Parece que a linha apareceram primeiro no fim da mesma linha. A seguinte expressão pode ter certeza de que o jogo especificado apenas corresponder e não correspondam à secção de referência cruzada. Ao criar única coincidir com o início eo fim de uma linha de texto da expressão regular, você pode fazê-lo.

/^Chapter [1-9][0-9]{0,1}$/

palavra jogo de limite é um pouco diferente, mas as expressões regulares uma capacidade muito importante. Limite de palavra é a localização eo espaço entre as palavras. Non-limite de palavra é qualquer outro local. A expressão a seguir corresponde ao início da palavra Capítulo três personagens, porque esses três personagens aparecem após um limite de palavra:

/\bCha/

\ Posição de caractere B é muito importante. Se ele está localizado no início da cadeia a ser correspondido, ele procura uma correspondência no início da palavra. Se ele está no final da cadeia, ele procura por um jogo no final de uma palavra. Por exemplo, a seguinte expressão combinando ter palavras cadeia capítulo, tal como aparece na frente do limite de palavra:

/ter\b/

A expressão a seguir corresponde a seqüência Capítulo apt, mas não corresponde a aptidão corda apt:

/\Bapt/

seqüência de palavras Apt aparece no capítulo non-limite de palavra, mas a palavra aparece na aptidão do limite de palavra. Para o operador B \ limite não-palavra, a posição não é importante, porque o jogo não se importa se é no início ou no final de uma palavra.

selecionar

Use parênteses para incluir todas as seleções, com opções entre adjacentes separadas por |. Mas não é um efeito colateral da utilização de parênteses, é jogos relevantes serão guardados, disponíveis neste momento :? Na primeira opção para eliminar este efeito colateral.

Onde :? não-captura de um elemento, há dois não captura elemento é = e os dois têm mais significado, o ex-pré-investigação positiva, em qualquer começar a ser parênteses são correspondentes é a expressão ??! padrão posicional para coincidir com a seqüência de pesquisa, que é pré-investigação negativo, em qualquer posição inicial não corresponde ao padrão de expressão regular para coincidir com a seqüência de pesquisa.

backreferences

Para um padrão regular expressão ou parte do padrão em ambos os lados irá resultar em parênteses adicionados jogo relevantes para um tampão de armazenamento temporário, cada sub-capturados são armazenados em ordem da esquerda para a direita jogo aparecem em um padrão de expressão regular. Tampão No. 1 desde o início, pode armazenar até 99 subexpressão capturado. Cada tampão pode utilizar '\ n' visita, em que n é um ou dois dígitos decimais identificar o tampão específico.

Você pode utilizar os metacaracteres não captura ':?', Ou para reescrever a captura, salvar a ignorar a correspondência relevante '=?'! '.

Backreferences mais fácil, uma das mais útil é a capacidade de fornecer o texto para encontrar dois jogos de palavras adjacentes idênticos. Um exemplo na seguinte frase:

Is is the cost of of gasoline going up up?

A frase acima, obviamente, tem muitas palavras repetidas. Se pudermos desenvolver um método para localizar a frase, em vez de encontrar ocorrências duplicadas de cada palavra, que quanto mais bom. A seguinte expressão regular usa um único subexpression para alcançar este objectivo:

/\b([a-z]+) \1\b/gi

expressões de captura, como [az] + especificado, incluindo uma ou mais letras. A segunda parte da expressão regular é combinar uma referência previamente capturado criança, isto é, a segunda ocorrência da palavra apenas correspondido pela expressão entre parênteses. \ 1 especifica o primeiro sub-jogo. Palavra metacharacters fronteira garantir que apenas detectar a palavra inteira. Caso contrário, frases como "é emitido" ou "isto é" e semelhantes não são identificar corretamente esta expressão.

expressão regular após marca global (g) indica, esta expressão é aplicada à cadeia de entrada pode encontrar outros tantos jogos. caso expressão insensível no final de (i) tag especifica case-insensitive. Potencial jogo tag multi-linha especifica as quebras de linha pode ocorrer em ambos os lados.

Referências anteriores pode também ser um Universal Resource Indicator (URI) nos seus componentes. Suponha que você queira ser dividido em o seguinte protocolo URI (ftp, http, etc.), endereços de domínio e página / path:

http://www.w3cschool.cc:80/html/html-tutorial.html

A seguinte expressão regular fornece essa funcionalidade:

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

A primeira sub-expressão entre parênteses captura a parte de protocolo do endereço da Web. A subexpressão corresponde a qualquer palavra cólon e duas barras na frente. A segunda sub-expressão entre parênteses captura a parte do endereço de domínio do endereço. Um ou mais caracteres que não sejam: subexpression jogo / e. A terceira sub-expressão entre parênteses capturar o número da porta (se for especificado). A sub-expressão corresponde a zero ou mais dígitos após o cólon. Ela só pode ser repetida uma vez que a sub-expressão. Finalmente, a quarta sub-expressão entre parênteses captura o caminho especificado endereço da Web e / ou página. Isso não inclui a sub-expressão corresponde a qualquer # ou espaço caracteres de sequência de caracteres.

A expressão regular aplicada ao URI acima, a entrada correspondente sub-contém os seguintes elementos:

  • A primeira sub-expressão entre parênteses contém "http"
  • A segunda sub-expressão entre parênteses contém "www.w3cschool.cc"
  • A terceira sub-expressão entre parênteses com ": 80"
  • A quarta sub-expressão entre parênteses contém "/html/html-tutorial.html"