Expressão regular e XPath

De MSTECH wiki
Ir para: navegação, pesquisa

Expressão regular

Introdução

Uma expressão regular é uma notação para representar padrões em strings. Serve para validar entradas de dados ou fazer busca e extração de informações em textos. Provê uma forma concisa e flexível de identificar cadeiras de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres.

Anatomia básica de uma expressão regular

Expressao.png

Tabela de caracteres/estruturas especiais

Caractere Significado
| (barra vertical) Separa alternativas.
() (parênteses) Definir escopo e procedência de operadores.
? (interrogação) Indica que há zero ou uma concorrência do elemento precedente.
* (asterisco) Indica zero ou mais ocorrências do elemento precedente.
+ (adição) Indica que há uma ou mais ocorrências do elemento precedente.
. (ponto final) Casa qualquer elemento.
\b Início ou fim de uma palavra.
\B NÃO é início ou NÃO é fim de uma palavra.
^ Início de uma palavra ou linha OU negação quando em uma expressão agrupada (entre []).
$ Fim de uma linha.
\w Caracteres alfanuméricos e underline ([A-Za-z0-9_]).
\W Caracteres não alfanuméricos e underline ([^A-Za-z0-9_]).
\d Coincide apenas dígitos ([0-9]).
\s Coincide qualquer caracter de espaço em branco.
\S Coincide qualquer caracter que não seja de espaço em branco.
\A A coincidência ocorre no primeiro caractere.
\Z A coincidência ocorre no final do último caractere de uma string ou linha (antes de \n).
\z A coincidência ocorre no final do último caractere de uma string, ignorando linhas.
\G A coincidência ocorre a partir do ponto no qual a última coincidência terminou.
\t TAB.
\n Nova linha.
\ Quando seguido de um caractere especial das expressões regulares, realiza coincidência daquele caractere.
{n} Coincidência dos caracteres precedidos exatamente n vezes.
{n,m} Coincidência dos caracteres precedidos entre n (número mínimo de repetições) e m (número máximo de repetições) vezes.

Pode-se deixar vazios tanto n ({,m}) quanto m ({n,}), o que causa coincidência apenas com o valor indica.

[ ] Utilizado para agrupamento de expressões.
[caracteres] Coincidência de quaisquer caracteres presentes entre os colchetes.
[c1-c2] Coincidência de quaisquer caracteres alfanuméricos entre c1 e c2 (em order alfabética/numérica).
.* Usado para significar "qualquer coisa".

Exemplos

Por exemplo, para verificar se um dado fornecido é um número de 0,00 a 9,99 pode-se usar a expressão regular \d,\d\d, pois o símbolo \d é um curinga que casa com um dígito.

O verbo casar aqui está sendo usado tradução para match, no sentido de combinar, encaixar, parear. Dizemos que a expressão \d,\d\d casa com 1,23 mas não casa com 123 (falta a vírgula) nem com 1,2c (“c” não casa com \d, porque não é um dígito).

\d{5}-\d{3}

O padrão de um CEP como 05432-001: 5 dígitos, um - (hífen) e mais 3 dígitos. A sequência \d é um metacaractere, um curinga que casa com um dígito (0 a 9). A sequência {5} é um quantificador: indica que o padrão precedente deve ser repetido 5 vezes, portanto \d{5} é o mesmo que \d\d\d\d\d.

[012]\d:[0-5]\d

Semelhante ao formato de horas e minutos, como 03:10 ou 23:59. A sequência entre colchetes [012] define um conjunto. Neste caso, o conjunto especifica que primeiro caractere deve ser 0, 1 ou 2. Dentro dos [] o hífen indica uma faixa de caracteres, ou seja, [0-5] é uma forma abreviada para o conjunto [012345]; o conjunto que representa todos os dígitos, [0-9] é o mesmo que \d. Note que esta expressão regular também aceita o texto 29:00 que não é uma hora válida (horas válidas serão o tema de um dos Exercícios).

[A-Z]{3}-\d{4}

É o padrão de uma placa de automóvel no Brasil: três letras de A a Z é seguidas de um - (hífen) seguido de quatro dígitos, como CKD-4592.

Para aprender

XPath

Introdução

O XPath é uma linguagem de consulta, semelhante a expressão regular, para pesquisa em documentos com estrutura XML (como HTML por exemplo). É um recurso extremamente útil e muito utilizado durante a criação de scripts de testes de software em plataforma web.

Softwares de automação de testes são utilizados para simular a ação de usuários reais através de interações diretas com a aplicação sob teste. Para isso, é necessário que os elementos contidos na aplicação sejam identificados pela ferramentas de automação de testes, para que então, ações (cliques, digitação, etc) sejam executadas sobre eles.

Identificando elementos

Exemplo:

 1 <html>
 2    <body>
 3       <table>
 4          <tr>
 5             <th>Ação</th>
 6             <th>Nome</th>
 7          </tr>
 8          <tr>
 9             <td><input type=“button” value=“Promover” id=“btnPromover" /></td>
10             <td>Cristiano Caetano</td>
11          </tr> 
12          <tr>
13              <td><input type=“button” value=“Promover” /></td>
14              <td>Elias Nogueira</td>
15          </tr>
16          <tr>
17              <td><input type=“button” value=“Promover” /></td>
18              <td>Júlio de Lima</td>
19          </tr>    
20       </table>
21    </body>
22 </html>

Tradicionalmente, existem duas formas (que oferecem menos risco), de identificar um elemento contido em um documento, são elas: baseado na árvore do elemento e baseado nas propriedades do elemento.

Baseado na árvore do elemento

Onde eu mostro para a ferramenta de automação toda a árvore do elemento:

Ação Identificação do elemento XPath
Clicar Documento HTML > Corpo > Tabela > 2a Linha > 1a Coluna > Botão Promover /html/body/table/tr[2]/td[1]/input

Baseado nas propriedades do elemento

Onde eu mostro para a ferramenta de automação propriedade(s) que destacam o elemento dos demais:

Ação Identificação do elemento XPath
Clicar Valor: “Promover”, Tipo: “button”, Id: “btnPromover” //input[@id=“btnPromover”]

É mais simples e seguro identificar elementos que possuem propriedades que o tornam únicos.

Elementos

Símbolo Descrição Exemplo
/ Pesquisa a partir da raiz da árvore /html/body/table (Encontra todas as tabelas contidas dentro da tag "body", que está dentro da tag “html")
// Pesquisa em toda a árvore //input[1] (Encontra o primeiro elemento “input”, pesquisando em toda a árvore)
[ ] Definição das propriedades de um elemento //table/tr/td[1] (Encontra o primeiro elemento “td” contido nas tags “tr” das tags “table”, pesquisando em toda a árvore)
@ Propriedade do elemento //*[@id=“btnPromover”] (Encontra um elemento que tenha a propriedade “id”, e que esta seja igual a “btnPromover", pesquisando em toda a árvore)
* Todos os elementos //table/* (Encontra todos os elementos contidos nas tags “table", pesquisando em toda a árvore)

Métodos

  • text( ) - O método “text()” é utilizado para encontrar elementos através do texto contido dentro deles, por exemplo, queremos encontrar o elemento “td” que possui o texto “Júlio de Lima”: //td[text()="Júlio de Lima"]
  • first() - Através do método “first()” é possível identificar o primeiro elemento contido em um determinado escopo, por exemplo, queremos identificar o elemento “input” contido na primeira coluna da primeira linha de uma tabela: //table/tr[first()]/td[1]/input
  • last() - Através do método “last()” é possível identificar o último elemento contido em um determinado escopo, por exemplo, queremos identificar o elemento “input” contido na primeira coluna da última linha de uma tabela: //table/tr[last()]/td[1]/input
  • Comparações - Usando comparações de conteúdos podemos encontrar elementos baseados no texto contido dentro de seus filhos. Por exemplo, queremos identificar o elemento “input” que está dentro da primeira coluna, de uma linha na qual a segunda coluna possui o texto “Teste”: //tr[td[2]="Teste"]/td[1]/input

Referências