Eu amo regex

Meu amigo Renato me trouxe uma perguntinha intrigante ontem à noite. Como pegar:
protocolo, servidor e linguagem de três urls assim:

http://www.uol.com.br/index.php
http://www.oi.com.br/recados.asp
https://google/services.pl

trata-las e gerar esta saída:
protocolo: http server: uol linguagem: php
protocolo: http server: oi linguagem: asp
protocolo: https server: google linguagem: pl


#!/bin/bash
# Criado em:Ter 27/Abr/2010 hs 10:23
# Last Change: Ter 27/Abr/2010 hs 10:23
# vim:ft=sh:fdm=syntax:nu:
# autor: Sérgio Luiz Araújo Silva
# e-mail: voyeg3r - google mail
# site: http://vivaotux.blogspot.com
# ( O O )
# +===========oOO==(_)==OOo==============+
# | |
# | °v° Sergio Luiz Araujo Silva |
# | /(_)\ Linux User #423493 |
# | ^ ^ voyeg3r  gmail.com |
# +======================================+
# faça uma regex para pegar:
# protocolo http ou https
# servidor uol, oi, google
# linguagem no final do nome php, asp, pl
# http://www.uol.com.br/index.php
# http://www.oi.com.br/recados.asp
# https://google/service.pl
# minha regex ficou assim:
# ^(https?)://(www\.)?([^./]*)[^/]*[^.]*(.*$)
# vamos a explicação:
# ^(https?) no começo de linha "^" http ou https note que a interrogação torna o 's' opcional (grupo 1)
# :// literal isto não nos interessa
# (www\.)? pode ou não ter www. agrupei para poder usar a interrogação tornando isto opcional (grupo 2)
# ([^./]*) tudo menos uma barra ou ponto pega o servidor (grupo 3)
# [^/]* tudo menos uma barra em qualquer quantidade
# [^.]* tudo menos um ponto - casa até o último ponto
# (.*$) casa com a linguagem (grupo 4)
# usando o sed para escrever o resultado
cat file | sed -r 's,(https?)://(www\.)?([^./]*)[^/]*[^.]*\.(.*$),protocolo: \1 server: \3 linguagem: \4,g'
# No vim habilite o modo "very magic" utilizando \v no começo da busca
# /\v(https?)://(www\.)?([^.\/]*)[^\/]*[^.]*\.(.*$)
# ou seja a sua regex fica basicamente a mesma, outra coisa é que assim você não tem que
# sequer navegar ou baixar qualquer programa para testar sua regex
view raw sed-subst.sh hosted with ❤ by GitHub


Pra finalizar um site pra você testar suas expressões regulares:
http://gskinner.com/RegExr/

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo