Após a demonstração do comando
expr com expressões numéricas e lógicas, falta apresentar como ele trabalha com expressões regulares. No lugar de operadores, os procedimentos usam palavras-chave.
Exceto por um uso de ":" como um operador. Os dois pontos realizam uma busca por um padrão assim como a palavra-chave "match".
Palavras-chave:
- + STRING :: interpreta o que vem depois de "+" como uma string, mesmo sendo palavra reservada ou um dos operadores.
- STRING : REGEX :: realiza uma busca em STRING usando por padrão REGEX.
- match STRING REGEX :: o mesmo que o anterior STRING : REGEX.
- substr STRING POSIÇÂO TAMANHO :: pega um pedaço de STRING a partir de POSIÇÃO e com TAMANHO como número de caracteres. Não aceita parâmetros negativos.
- index STRING CHARS :: retorna em qual posição de STRING foi encontrado o caractere CHARS.
- length STRING :: conta a quantidade de caracteres presentes em STRING.
Exemplos com o operador ":" e com a palavra "match":
expr A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso : ^[^a]
Ou:
expr match A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso ^[^a]
Ambas retornam:
1
Como a regex pede que o primeiro caractere seja diferente de "a" (minúsculo) e o primeiro caractere da string não é um "a" (minúsculo), o retorno é 1, ou seja, verdadeiro para este padrão regex. Se não usar a palavra-chave "match", usa-se a sintaxe com dois pontos.
Além disso, a frase está com barras invertidas antes dos espaços em branco. Sem elas, o
expr faria confusão e pensaria que há vários parâmetros na linha de comando.
Para usar melhor esta opção, recomendo um aprofundamento em regex. Isto foge do foco deste artigo.
Exemplo com a palavra-chave
substr:
expr substr A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso 18 6
Retorna:
marrom
expr substr A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso 17 6
Retorna:
marro
Na verdade, ele retorna como primeiro caractere um espaço em branco seguido da palavra
marro, porque a posição 17 da string é um caractere em branco. Para pegar a palavra "marrom" com este caractere em branco, seria necessário os parâmetros "17 7" por causa do tamanho da substring.
Exemplos com a palavra-chave "index":
expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" z
Retorna:
0, pois a string não possui a letra z.
expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" m
Retorna:
18, pois na string a primeira ocorrência da letra m ocorre na posição 18.
expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" coelho
Retorna:
3, pois de todas os caracteres do segundo parâmetro, a letra "l" é a que ocorre primeiro na string na posição de número 3.
expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" urso
Retorna:
8, pois de todas os caracteres do segundo parâmetro, a letra "r" é a que ocorre primeiro na string na posição de número 8.
Como se percebe, a busca é por caracteres e não por uma palavra.
Exemplo com a palavra-chave "length":
expr length STRING
Exemplo:
expr length "A ligeira raposa marrom saltou sobre o cão preguiçoso"
Retorna:
55. A frase está entre aspas por causa dos espaços em branco. Para não usar estas aspas, os espaços em branco devem trazer antes barras invertidas senão dará erro. Assim:
expr length A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso
Retorna também:
55