<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>do software &#187; Métodos</title>
	<atom:link href="http://dosoftware.wordpress.com/category/metodos/feed/" rel="self" type="application/rss+xml" />
	<link>http://dosoftware.wordpress.com</link>
	<description>Desenvolvimento ágil, Java, .NET e Data Mining</description>
	<lastBuildDate>Tue, 20 May 2008 02:06:03 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='dosoftware.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/df77b9fe98582c81cb5efb8b3201aef2?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>do software &#187; Métodos</title>
		<link>http://dosoftware.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dosoftware.wordpress.com/osd.xml" title="do software" />
		<item>
		<title>Introdução a Expressões Regulares com Java</title>
		<link>http://dosoftware.wordpress.com/2008/02/23/introducao-a-expressoes-regulares-com-java/</link>
		<comments>http://dosoftware.wordpress.com/2008/02/23/introducao-a-expressoes-regulares-com-java/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 00:38:35 +0000</pubDate>
		<dc:creator>dosoftware</dc:creator>
				<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Métodos]]></category>

		<guid isPermaLink="false">http://dosoftware.wordpress.com/?p=6</guid>
		<description><![CDATA[ 

Recomendo: Aurélio Jargas

O JavaFree é uns dos maiores portais de Java em língua portuguesa e tive o prazer de colaborar com algum material há um tempo atrás.
Uma dessas contribuições foi um tutorial muito bem recebido sobre Expressões Regulares em Java. Já se vão quatro anos e o pessoal continua movimentando o tópico, o que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dosoftware.wordpress.com&blog=2951260&post=6&subd=dosoftware&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div style="float:right;text-align:center;"> <img src="http://aurelio.files.wordpress.com/2006/10/regex-capa.jpg?w=134&#038;h=200" alt="Livro do Aurélio Jargas" height="200" width="134" /><br />
<a href="http://aurelio.wordpress.com/"><br />
<label>Recomendo: Aurélio Jargas</label><br />
</a></div>
<p>O JavaFree é uns dos maiores portais de Java em língua portuguesa e tive o prazer de colaborar com algum material há um tempo atrás.</p>
<p>Uma dessas contribuições foi um tutorial muito bem recebido sobre Expressões Regulares em Java. Já se vão quatro anos e o pessoal continua movimentando o tópico, o que me deixa muito satisfeito.</p>
<p>Segue o texto como foi publicado na época. Para o original clique <a href="http://www.javafree.com.br/forum/viewtopic.php?t=5090">aqui</a>.</p>
<p><b>Introdução a Expressões Regulares com Java<br />
Por Tadeu R. A. Santos</b></p>
<p>A partir da versão 1.4 do J2SE, Java conta com um bom suporte a expressões<br />
regulares. Este tutorial tenta servir de introdução a este conceito com aplicação<br />
Java.</p>
<p>1. O que são expressões regulares?</p>
<p>Trata-se de um método formal para se especificar um padrão de texto.<br />
O uso de expressões regulares na computação é abundante e praticamente<br />
pré-histórico. Isto se deve pela facilidade de se fazer comparações, a fim de achar<br />
uma dada palavra (ou parte dela) em um texto.</p>
<p>2. Aplicações</p>
<p>Quando, em um SO de modo texto, deseja-se listar todos os arquivos começados por J<br />
em um determinado diretório, basta fazer:</p>
<p>ls J* (unix like) ou<br />
dir J* (dos)</p>
<p>Neste caso, o uso do caractere * dá-se de forma especial, significando &#8220;qualquer<br />
cadeia de caractere (String)&#8221;. Assim serão mostrados arquivos como:</p>
<p>Java.txt;<br />
JavaFree.rox;<br />
JavaDetona.net;<br />
Entre outros começados com J.</p>
<p>Chamamos J*, então, de expressão regular.<br />
Como esse exemplo, existem centenas de aplicações onde as expressões regulares<br />
poupam um bom trabalho na implementação.</p>
<p>Para fim de exemplo didático, será mostrado um código simples para validar endereços<br />
de email (hello world das expressões regulares <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).</p>
<p>3. Gramática das Expressões Regulares</p>
<p>Antes do exemplo, porém, seria de bom tom o conhecimento dos caracteres especiais<br />
usados em expressões regulares. Apesar de ser um assunto extenso, será abordado<br />
somente alguns dos caracteres especiais mais usados e aceitos pela API do Java, a<br />
saber: [\^]?*+-.</p>
<p>*<br />
Qualquer cadeia de caractere.</p>
<p>Expressão Regular: J*Free // Qualquer coisa que comece com J e termine com Free</p>
<p>String comparada: JavaFree<br />
String válida: sim</p>
<p>String comparada: JavaPago<br />
String válida: não</p>
<p>[ ]<br />
Um dos elementos do conjunto</p>
<p>Expressão Regular: [rgp]ato // Qualquer palavra com a primeira letra sendo ou &#8216;r&#8217; ou<br />
&#8216;g&#8217; ou &#8216;p&#8217;, e as letras seguintes sendo &#8220;ato&#8221;</p>
<p>String comparada: pato<br />
String válida: sim</p>
<p>String comparada: gato<br />
String válida: sim</p>
<p>String comparada: xato<br />
String válida: não</p>
<p>^<br />
Exclusão</p>
<p>Expressão Regular: [^rgp]ato // Qualquer palavra cuja primeira letra NÃO é &#8216;r&#8217; nem<br />
&#8216;g&#8217; nem &#8216;p&#8217;, sendo &#8220;ato&#8221; o resto da palavra</p>
<p>String comparada: rato<br />
String válida: não</p>
<p>String comparada: xato<br />
String válida: sim</p>
<p>-<br />
Intervalo</p>
<p>Expressão Regular: [H-L]avaFree // A primeira letra da palavra deve está entre H e L<br />
(inclusive H e L)</p>
<p>String comparada: JavaFree<br />
String válida: sim</p>
<p>String comparada: RavaFree<br />
String válida: não</p>
<p>.<br />
Qualquer caractere</p>
<p>Expressão Regular: JavaFre.</p>
<p>String comparada: JavaFree<br />
String válida: sim</p>
<p>\<br />
Classe de caracteres pré-definidos. São eles:</p>
<p>\d : Um dígito,<br />
\D : Algo que não seja um dígito,<br />
\s : Um espaço em branco,<br />
\S : Algo que não seja um espaço em branco,<br />
\w : Qualquer letra, dígito ou underscore ( _ )<br />
\W : Algo que não seja letra, dígito ou underscore</p>
<p>Expressão regular: \wJavaFree\s200\d\w</p>
<p>String comparada: _JavaFree 2004_<br />
String válida: sim<br />
?<br />
Uma ou nenhuma vez, assim como &#8216;*&#8217;, &#8216;?&#8217; é um elemento quantificador.</p>
<p>Expressão regular: a? // Uma ou nenhuma ocorrência de &#8216;a&#8217;</p>
<p>String comparada:<br />
String válida: sim</p>
<p>String comparada: a<br />
String válida: sim</p>
<p>+<br />
Uma ou mais vezes, assim como &#8216;*&#8217; e &#8216;?&#8217;, é um elemento [i]quantificador[i].</p>
<p>Expressão regular: a+ // Uma ou mais ocorrências de &#8216;a&#8217;</p>
<p>String comparada:<br />
String válida: não</p>
<p>String comparada: aaa<br />
String válida: sim</p>
<p>Pode-se ainda combinar todos esses caracteres especiais em uma só expressão regular,<br />
formando uma busca mais restringente.</p>
<p>4. Java API</p>
<p>Java dispõe de mecanismos muito bons para o tratamento de expressões regulares no<br />
pacote java.util.regex . Para um melhor aproveitamento, é aconselhável o estudo da<br />
documentação deste pacote disponível em:<br />
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/package-summary.html</p>
<p>Um objeto da classe Pattern contém a expressão regular desejada que será usada em<br />
uma comparação. Já um objeto da classe Matcher contém os métodos que validarão nossa<br />
String, dada uma expressão regular.</p>
<p>Ex.:</p>
<p><code><br />
1. Pattern padrao = Pattern.compile("Java*");<br />
2. Matcher pesquisa = padrao.matcher("JavaFree");<br />
3.<br />
4. if (pesquisa.matches())<br />
5. {<br />
6.         System.out.println("JavaFree Rox");<br />
7. }<br />
8. else<br />
9. {<br />
10.         System.out.println("Hum..?");<br />
11. }<br />
</code></p>
<p>Pattern padrao = Pattern.compile(&#8220;Java*&#8221;); Matcher pesquisa = padrao.matcher(&#8220;JavaFree&#8221;); if (pesquisa.matches()) {         System.out.println(&#8220;JavaFree Rox&#8221;); } else {         System.out.println(&#8220;Hum..?&#8221;); }</p>
<p>O exemplo acima poderia, ainda, ser feito somente com o uso do método boolean<br />
matches(String regex, CharSequence entrada) da classe Pattern, da seguinte<br />
forma:</p>
<p><code><br />
1. if (Pattern.matches("Java*", "JavaFree"))<br />
2. {<br />
3.         System.out.println("JavaFree Rox");<br />
4. }<br />
5. else<br />
6. {<br />
7.         System.out.println("Hum..?");<br />
8. }<br />
</code></p>
<p>if (Pattern.matches(&#8220;Java*&#8221;, &#8220;JavaFree&#8221;)) {         System.out.println(&#8220;JavaFree Rox&#8221;); } else {         System.out.println(&#8220;Hum..?&#8221;); }</p>
<p>Estes exemplos mostram que é bem fácil trabalhar com expressões regulares em Java.</p>
<p>5. Exemplo: Validar um Endereço de Email</p>
<p>Fica bem simples, agora, validar um endereço de email (ou outro dado qualquer).</p>
<p><code><br />
1. /* Exemplo prático<br />
2.  *<br />
3.  * Verifica se um endereço de email é válido<br />
4.  *<br />
5.  * Compilar: javac ValidarEmail.java<br />
6.  * Executar: java ValidarEmail [url="mailto:teste@meuemail.com"]teste@meuemail.com[/url]<br />
7.  */<br />
8.<br />
9. // --------------------------------------------------------------- classes nativas<br />
10. import java.util.regex.*;<br />
11.<br />
12. // --------------------------------------------------------------- nossa classe<br />
13. class ValidarEmail<br />
14. {<br />
15.         public static void main (String[] args)<br />
16.         {<br />
17.                 if (args.length &lt; 1) // Falta argumentos de execução<br />
18.                 {<br />
19.                         System.out.println("Uso: java ValidarEmail ");<br />
20.                 }<br />
21.                 else<br />
22.                 {<br />
23.                         // Email válido é na forma [url="mailto:usario@endereco.com"]usario@endereco.com[/url] , [url="mailto:usario@endereco.com.br"]usario@endereco.com.br[/url], etc.<br />
24.                         // Tente fazer um expressão mais restringente <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
25.                         Pattern padrao = Pattern.compile(".+@.+\\.[a-z]+");<br />
26.<br />
27.                         Matcher pesquisa = padrao.matcher(args[0]);<br />
28.<br />
29.                         if (pesquisa.matches())<br />
30.                         {<br />
31.                                 System.out.println("O email " + args[0] + " eh valido!");<br />
32.                         }<br />
33.                         else<br />
34.                         {<br />
35.                                 System.out.println("O email " + args[0] + " nao eh valido!");<br />
36.                         }<br />
37.                 }<br />
38.         }//end main()<br />
39. }//ValidarEmail.class<br />
</code></p>
<p>Vale sempre estudar a documentação das classes. O exemplo dado aqui é bem trivial,<br />
exitem mais métodos com outras funcionalidade muito boas no pacote.</p>
<p>6. Referências</p>
<p>[1] Sun Microsystems Inc, The Java[tm] Tutorial Lesson: Regular Expressions<br />
[java.sun.com/docs/books/tutorial]<br />
[2] JARGAS, Aurélio Marinho, EXPRESSÕES REGULARES<br />
[guia-er.sourceforge.net/guia-er.html#toc1, 25 abr, 2003]<br />
[3] SHAH, Hetal C. , Regular Expressions in J2SE [onjava.com, 26 nov, 2003]</p>
<p>Até o próximo,</p>
<p>Tadeu R. A. Santos</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dosoftware.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dosoftware.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dosoftware.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dosoftware.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dosoftware.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dosoftware.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dosoftware.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dosoftware.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dosoftware.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dosoftware.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dosoftware.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dosoftware.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dosoftware.wordpress.com&blog=2951260&post=6&subd=dosoftware&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dosoftware.wordpress.com/2008/02/23/introducao-a-expressoes-regulares-com-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d9a8ac7cc03fcfe9c28e7a3150bc8f1e?s=96&#38;d=identicon" medium="image">
			<media:title type="html">dosoftware</media:title>
		</media:content>

		<media:content url="http://aurelio.files.wordpress.com/2006/10/regex-capa.jpg" medium="image">
			<media:title type="html">Livro do Aurélio Jargas</media:title>
		</media:content>
	</item>
	</channel>
</rss>