Microsoft Word - Á¤±ÔÇ¥Çö½Ä.doc

Similar documents
PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

untitled

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

TEST BANK & SOLUTION

Microsoft PowerPoint 웹 연동 기술.pptx

Java ...

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - chap06-1Array.ppt

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

슬라이드 1

Design Issues

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

Tcl의 문법

PowerPoint 프레젠테이션

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

02 C h a p t e r Java

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

4장.문장

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JAVA PROGRAMMING 실습 09. 예외처리

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

쉽게 풀어쓴 C 프로그래밊

Cluster management software

슬라이드 1

비긴쿡-자바 00앞부속

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

쉽게

제11장 프로세스와 쓰레드

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

C++ Programming

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Spring Data JPA Many To Many 양방향 관계 예제

C++ Programming

PowerPoint Presentation

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

05-class.key

rmi_박준용_final.PDF

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

Microsoft PowerPoint - lec2.ppt

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

Network Programming

PowerPoint 프레젠테이션

Microsoft PowerPoint - 03-TCP Programming.ppt

슬라이드 1

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

PowerPoint 프레젠테이션

PowerPoint Presentation

Java Programing Environment

gnu-lee-oop-kor-lec10-1-chap10

쉽게 풀어쓴 C 프로그래밍

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

슬라이드 1

강의 개요

교육자료

Microsoft PowerPoint - Lect04.pptx

ThisJava ..

Microsoft PowerPoint - Regular Expresssions.ppt

PowerPoint Presentation

chap x: G입력

chap 5: Trees

07 자바의 다양한 클래스.key

PowerPoint 프레젠테이션

Visual Basic 반복문

Microsoft PowerPoint - CSharp-10-예외처리

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Microsoft PowerPoint - lec12 [호환 모드]

Cluster management software

금오공대 컴퓨터공학전공 강의자료

adfasdfasfdasfasfadf

윈도우즈프로그래밍(1)

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])


PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 05. 객체의 활용

Transcription:

작성자 : 김성박 ( 삼성 SDS 멀티캠퍼스전임강사 ) email : urstory@nownuri.net homepage : - 해당문서는 JAVA강좌란 혹은 http://www.javastudy.co.kr의 칼럼 란에서만배포합니다. 문서는계속버전업될수있습니다. 필자의허락없이수정, 삭제, 재작성, 이동등을할수없습니다. - 잘못된부분을발견하거나, 추가할사항이있다면 의자바관련게시판에글을남겨주세요. - 해당문서는이미 jdk1.4 이상이설치되어있는것을가정으로합니다. 정규표현식과자바. 정규표현식이란텍스트 (text) 를기술하기위한표현방식을말합니다. 정규표현식은텍 스트를탐색하거나문자열을조작하는데있어서강력한문법을제공하여줍니다. 정규표현식은주로유닉스시스템과펄 (perl) 과같은언어에서많이사용되어왔으며, 그말은유닉스시스템과펄은문자열을아주쉽게처리할수있다는것을의미합니다. 이러한정규표현식이 J2SDK 1.4 에이르러서야공식적으로기본 Package 로제공되게 되었습니다. J2SDK 1.4 이전에는정규표현식을이용하기위하여는 Apache Jakarta 프로젝트 의 Regexp 와같은 package 를많이이용하였습니다. 1. 정규표현식의문법 정규표현식이란문자열안에서의일정한을표현하기위한표현식을말합니다. 이러한표현식은펄, 유닉스시스템그리고자바에서공통적으로사용될수있습니다. 정규표현식을자바언어에서이용하기전에먼저정규표현식을표현하는방법부터자세히알필요가있습니다. - 1 -

문자열안에서 hello 라는말이들어가있는지, 혹은숫자가안에들어가있는지알아보고자할경우에사용됩니다. 정규표현식을잘사용한다는말은, 찾고자하는에대한표현을여러가지특수문자들을이용하여잘표기한다는것을의미합니다. 이러한을표기하기위한특수문자에대하여잘알아보도록하겠습니다. 1-1). 특수문자.. 특수문자는임의의한문자를나타냅니다. 예를들면, h.s 라는은반드시 h' 로시작하며 's' 로반드시끝나는단어를의미합니다. 따라서 'his', 'hos' 등은모두해당에이라고말할수있습니다. 그러나 hs 와같은문자열은에일치하지않습니다. 그이유는. 특수문자가위치한곳에는반드시한글자가위치하여야하기때문입니다. a.b acb, adb, azd 등 ab. abc, abd, abz 등.bc abc, dbc, zbc 등 1-2) * 특수문자. * 특수문자는바로앞의문자를나타냅니다. * 는바로앞의문자가없거나하나이상반복한다는의미를뜻합니다. 만약 a*' 라고쓰여있는이있다면, 'a', 'aa', 'aaa' 등이가능합니다. * 특수문자를사용할때주의하여야할점은을지정할때 * 앞에는한글자이상의단어가반드시와야한다는것입니다. hello* hell, hello, helloo, hellooo 등 ab*c abc, abbc, abbbc, abbbbc 등 *d 불가능 - 2 -

1-3) '+' 특수문자 + 특수문자는 * 특수문자와흡사하지만, * 특수문자와는달리반드시하나이상의문자가반복을해야한다는것입니다. 예를들자면 hello+' 라고을지정한다면 hello', 'helloo', 'hellooo' 등 + 특수문자바로앞의문자는반드시하나이상반복해야합니다. hello+ hello, helloo, hellooo, helloooo 등 ab+c abc, abbc, abbbc, abbbbc 등 +d 불가능 1-4)? 특수문자? 특수문자의바로앞의문자가하나가있거나, 없거나하는것을의미합니다. 예를 들자면 a?c' 라고을지정한다면 'c', 'ac' 중에서하나를의미하게됩니다. hello? hell, hello try? tr, try 1-5) '^' 특수문자 ^ 특수문자는문장의처음을나타냅니다. 예를들어 ^Hello' 라고작성된이있 다면해당에일치하기위하여문자열은반드시 'Hello' 로시작을하여야합니다. ^Hello Hello World - 3 -

^The The pen 1-6) '$' 특수문자 $ 특수문자는문장의끝을나타냅니다. 예를들어 World$' 라고작성된이있다 면해당에일치하기위하여문자열은반드시 World' 로끝을맺어야합니다. World$ PHP$ Hello PHP World Start PHP 1-7) '[ ]' 특수문자대괄호 [ ] 특수문자의의미는괄호안의문자중일치하는것을찾고자할경우사용합니다. 예를들자면 '[abc]' 라고을작성하게되면문자열에 a' 나 b' 혹은 c' 등이있어야합니다. [abc] a, b, c, ab, abc 등 [a-z] [A-Z] 소문자가포함된모든문자열 대문자가포함된모든문자열 [0-9] 숫자가포함된모든문자열 ^[a-za-z0-9] 숫자나영문자로시작되는모든문자열 1-8) [ ] 특수문자안에서의 ^ 특수문자대괄호 [ ] 특수문자안에서 ^ 특수문자가쓰이게되면 [ ] 특수문자안에있는문자와일치하지않는문자열을포함하고있는을의미합니다. 즉 [^abc]de 라고을작성하게되면 'ade', 'bde', 'cde' 를제외한.de' 과같은의미가됩니다. - 4 -

[^abc]de a[^0-9]c dde, fde, zde 등 abc, acd, add 등 1-9) { 특수문자중괄호 { ' 특수문자는 { 특수문자앞의문자나문자열의반복되는개수를말합니다. 예를들자면 'hel{2o' 라는을작성하게되면 hello' 문자열이문자열에포함되어있어야됩니다. gu{5ggle gu{3,ggle guuuuugle guuuggle, guuuuggle, guuuuuggle 등 (u 가 3 개이상 ) gu{2,4ggle guuggle, guuuggle, guuuuggle 1-10) '( )' 특수문자소괄호 ( ) 특수문자는 ( ) 특수문자안의글자들을하나의문자로봅니다. 예를들어 gu(gg){2le 와같은을작성하게되면 guggggle' 문자열이문자열에포함되어있어야됩니다. (hello){3 (hello)* hellohellohello, hey hellohellohello 등 NULL, hello, hellohello, hellohello 등 1-11) 특수문자 안에서 OR 연산을사용할때사용합니다. 예를들어 'hi hello' 는 hi 나 hello 가포 - 5 -

함되어있는문자열을의미합니다. man woman man, woman, manwoman, superman 등 left right left, right, leftright 등 1-12) 문자클래스 ( character class ) '[]' 특수문자안에서자주사용되는들을미리키워드로정의하여놓은것을문자클래스라고합니다. 해당문자클래스를 J2SDK 1.4에서는다르게사용을합니다. ( 문자클래스는 PHP와같은언어에서는이용되지만 JAVA에서는이용되지않습니다. J2SDK 1.4의예를참고하십시요. ) 문자클래스 J2SDK 1.4 의예 [a-za-z] ( 모든영문자 ) [0-9] ( 숫자 ) [a-za-z0-9] ( 영문자와숫자 ) [[:alpha:]] [[:digit:]] [[:alnum:]] p{alpha p{digit p{alnum 공백 [[:space:]] p{space 1-13) 정규표현식에서특수문자의사용 1-12) 까지말한특수문자를정규표현식의에서사용하려면해당특수문자앞에역슬래시 ( ) 를붙입니다. 물론역슬래시 ( ) 를에서사용하려면역슬래시를 2개연속하여써주어야합니다. 2. J2SDK 1.4.x 에서의정규표현식이용 - 6 -

J2SDK 1.4.x에서정규표현식을이용하기위한방법으로는크게, java.lang.string class 에새롭게추가된메소드를이용하는방법과 java.util.regex 패키지를이용하는방법이있습니다. 2가지방법에대하여모두알아보도록하겠습니다. 2-1) String class에새롭게추가된정규표현식관련메소드메소드이름설명 boolean matches(string regex) 문자열안에 regex정규표현식과일치하는이있다면 true, 그렇지않으면 false를반환합니다. String replaceall(string regex, 문자열안에 regex정규표현식으로일치하는모든부분 String replacement) 을 replacement문자열로치환한결과를반환합니다. String replacefirst(string regex, 문자열안에 regex정규표현식으로일치하는첫부분을 String replacement) replacement문자열로치환한결과를반환합니다. String[] split(string regex) 문자열안에 regex정규표현식과일치하는부분을기준으로분할하여배열로반환합니다. 예제 1) matches 메소드의사용 ReTest1.java public class ReTest1{ public static void main(string args[]){ String msg1 = "hello world"; String regex1 = "hello"; String regex2 = "hello([a-z ]*)"; System.out.println(msg1.matches(regex1)); System.out.println(msg1.matches(regex2)); String msg2 = "hello world3"; String regex3 = "hello"; String regex4 = "hello([a-z ]*)"; System.out.println(msg2.matches(regex3)); System.out.println(msg2.matches(regex4)); String msg3 = "gooooooogle"; String regex5 = "goo*gle"; String regex6 = "google"; - 7 -

System.out.println(msg3.matches(regex5)); System.out.println(msg3.matches(regex6)); // end main // end class ReTest1.java 를컴파일하고실행하면그림 1 과같은결과가나오게됩니다. 그림 1 ReTest1.java 의컴파일과실 ReTest1.java에서사용된 matches메소드는 J2SDK1.4.x이상에서만사용할수있기때문에컴파일시에는반드시 -source 1.4 옵션을줘야합니다. 소스를한줄한줄설명하도록하겠습니다. String msg1 = "hello world"; String regex1 = "hello"; String regex2 = "hello([a-z ]*)"; System.out.println(msg1.matches(regex1)); System.out.println(msg1.matches(regex2)); msg1 String형변수에 hello world 문자열을지정한후, String class가가지고있는 matches메소드의인자로 regex1과 regex2를넣어서결과를확인해보면, 첫번째것은 false가두번째것은 true가나옵니다. regex1의은 hello라는정확한을찾는것이기때문에 false이며 regex2의은 hello로시작되며, 그후의문자열은소문자와공백들로이루어져있다라는의미이기때문입니다. - 8 -

String msg2 = "hello world3"; String regex3 = "hello"; String regex4 = "hello([a-z ]*)"; System.out.println(msg2.matches(regex3)); System.out.println(msg2.matches(regex4)); msg2 String형변수에 hello world3 이라는문자열을지정한후, matches메소드에인자로 regex3와 regex4에지정된을인자로넣어서일치되는지확인하고있습니다. 이경우, hello 로정의된은 hello 와정확히일치하여야하기때문에 false가나오며, hello([a-z ]*) 로정의된은 msg2안에들어있는문자열 3을지정하지않았기때문에 false가반홥됩니다. String msg3 = "gooooooogle"; String regex5 = "goo*gle"; String regex6 = "google"; System.out.println(msg3.matches(regex5)); System.out.println(msg3.matches(regex6)); msg3 String형변수에 "gooooooogle" 이라는문자열을지정한후이일치하는지보고있습니다. regex5에지정된 goo*gle 은 goo로시작하고 gle로끝나는모든문자열을지칭하는것이기때문에 true가반환되며, regex6에지정된 google 은정확하게 google 과일치해야함으로 false가반환되게됩니다. 예제 2) replaceall 메소드의사용 ReTest2.java public class ReTest2{ public static void main(string args[]){ String msg = "gooooooogle goooogle gooogle goooogle"; String regex = "goo*gle"; System.out.println(msg.replaceAll(regex, "google")); // end main // end class - 9 -

ReTest2.java 를컴파일하고실행하면다음과같은결과가나옵니다. 그림 2 ReTest2.java 의컴파일과실행 ReTest2.java 의내용을한줄한줄설명하도록하겠습니다. String msg = "gooooooogle goooogle gooogle goooogle"; String regex = "goo*gle"; System.out.println(msg.replaceAll(regex, "google")); String형변수 msg에문자열 "gooooooogle goooogle gooogle goooogle" 을지정한후, replaceall메서드를이용하여 regex과일치하는내용을 google 이라는문자열로치환한후결과를출력하도록합니다. 이때 regex goo*gle 은 goo 로시작하고 gle 로끝나는부분을의미함으로 gooooooogle 문자열도 google 로, goooogle 문자열도 google 로 google 문자열도 google 로치환하게됩니다. 예제 3) replacefirst 메소드의사용 ReTest3.java public class ReTest3{ public static void main(string args[]){ String msg = "gooooooogle goooogle gooogle goooogle"; String regex = "goo*gle"; System.out.println(msg.replaceFirst(regex, "google")); // end main // end class - 10 -

그림 3 ReTest3.java 의컴파일과실행 replacefirst메소드는 replaceall 메소드의사용방법과흡사하지만, 과일치하는첫번째문자열만치환을한다는것입니다. 즉소스를분석하면다음과같습니다. String형변수 msg에문자열 "gooooooogle goooogle gooogle goooogle" 을지정한후, replacefist메서드를이용하여 regex과일치하는첫번째문자열을 google 이라는문자열로치환한후결과를출력하도록합니다. 이때 regex goo*gle 은 goo 로시작하고 gle 로끝나는부분을의미함으로 gooooooogle 문자열이 google 로치환하게됩니다 예제 4) split 메소드의사용 ReTest4.java public class ReTest4{ public static void main(string args[]){ String msg = "one--two**three"; String regex = "-- * *"; String[] ss = msg.split(regex); for(int i = 0; i < ss.length; i++){ System.out.println(ss[i]); // end main // end class - 11 -

그림 4 ReTest4.java 의컴파일과실행 ReTest4.java 를한줄한줄설명하도록하겠습니다. String msg = "one--two**three"; String regex = "-- * *"; String[] ss = msg.split(regex); for(int i = 0; i < ss.length; i++){ System.out.println(ss[i]); msg String변수에 "one--two**three" 문자열을지정한후, regex String변수에 - - * * 정규표현식을지정하고있습니다. 해당정규표현식의의미는 -- 와일치하거나 ** 와을말합니다. 이때 * 문자앞에 이사용된의미는 * 문자가정규표현식에서이미정의된특수문자이기때문입니다. 정규표현식에서 * 문자를특수문자가아닌일반문자로사용하기위하여는앞에 ( 역슬래시 ) 가붙어야하는데자바문법에서는큰따옴표안에서 문자의표현은 로해야하기때문에 * 와같이사용되었습니다. split메소드에 regex변수를지정하여문자열을나눠배열로나뉘게됩니다. 이경우, msg문자열에는 -- 문자열과 ** 문자열을기준으로쪼개지면서 ss배열에는 3개의원소가지정되게됩니다. 3개의원소는 one, two 그리고 three 값을말합니다. for 반복문을이용하여 ss배열의길이만큼출력한결과는따라서그림4) 와같이나오게되는것입니다. 1-2) java.util.regex 패키지를이용한정규표현식의처리 java.util.regex 패키지는 J2SDK1.4이후에추가된패키지입니다. java.util.regex패키지 - 12 -

는 Matcher, Pattern 2가지클래스와 PatternSyntaxException 예외로구성되어져있습니다. 즉, java.util.regex 패키지를이용한다는것은위의 3가지클래스를이용하는것을의미합니다. 사용예를하나들어보도록하겠습니다. 예제 ) java.util.regex 패키지의이용 ReTest5.java import java.util.regex.*; public class ReTest5{ public static void main(string[] args){ String str = "hello++world--hi++world"; String regex = "( + +) (--)"; m.start(0)); Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(str); while (m.find()) { System.out.println("Found '" + m.group(0) + "' at position " + 그림 5 ReTest5.java 의컴파일과실행 - 13 -

ReTest5.java 소스를보면, Pattern class의 static 메소드인 compile메소드에 regex문자열 ( ) 을인자로넣어 Pattern객체를할당받는것을알수있습니다. 그후에, Pattern class가가지고있는 static 메소드인 macher메소드의인자로 str문자열을집어넣어 Matcher 객체를할당받습니다. Matcher 객체는 complie메소드의인자로넣은과 macher메소드의인자로넣은문자열과일치하는정보를객체화하고있는객체입니다. Macher객체를얻은후에는 Macher class가가지고있는메소드를이용하여, str문자열에서 regex과의위치정보를모두출력하게됩니다. 이때이없을때까지모두뽑아내기위하여는 find메소드를이용하였으며, 정규그룹 0번째에을발견하기위하여는 group메소드를, 일치하는위치값을출력하기위하여는 start메소드가이용되었습니다. 참고하세요. 정규표현식에서중요한것으로정규그룹이여기에서사용되었는데, 정규그룹을간단하게설명하면아래와같습니다. - 정규표현그룹이란왼쪽에서우측으로괄호를세는것으로써, 번호를붙일수있게됩니다. 예를들어정규표현식 ((A)(B(C))) 가있을경우 4개의그룹으로분류됩니다. 0번값은전체를나타나게됩니다. 1 ((A)(B(C))) 2 (A) 3 (B(C)) 4(C) 예제 ) 문자열에서 URL 값만뽑아내기 ReTest7.java import java.util.regex.*; public class ReTest7{ public static void main(string[] args){ - 14 -

String regex = "([ p{alnum]+)://([a-z0-9. - &%=?:@~ _]+)"; //String regex = "([[a-za-z0-9]]+)://([a-z0-9. - &%=?:@~ _]+)"; String strhtml = " <h1> http://www.yahoo.co.kr </h1> hohoho http://carami.sarang.net http://linux-sarang.net"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(strhtml); while (m.find()) { System.out.println(m.group(0)); System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println("----------------"); 그림 6 ReTest7.java 의컴파일과실행 - 15 -

ReTest7.java예제는 strhtml 문자열에있는내용중 URL정보만을뽑아서출력하는예제입니다. "([ p{alnum]+)://([a-z0-9. -&%=?:@~ _]+) 와같은복잡한이이용된것을알수가있습니다. 예제 ) URL 을자동으로링크걸기 ReTest8.java import java.util.regex.*; public class ReTest8{ public static void main(string[] args){ String regex = "([ p{alnum]+)://([a-z0-9. - &%=?:@~ _]+)"; //String regex = "([[a-za-z0-9]]+)://([a-z0-9. - &%=?:@~ _]+)"; String strhtml = " <h1> http://www.yahoo.co.kr </h1> hohoho http://carami.sarang.net http://linux-sarang.net"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(strhtml); String s = m.replaceall("<a href='http://$2' target=_blank>http://$2</a>"); System.out.println(s); - 16 -

그림 7 ReTest8.java 의컴파일과실행 ReTest8.java는 ReTest7.java를약간수정하였습니다. ReTest8.java 는 Matcher class가가지고있는 replaceall메소드를이용하여자동으로링크를걸어주고있습니다. String s = m.replaceall("<a href='http://$2' target=_blank>http://$2</a>"); 위의문장에서 $2 라고나온부분은정규그룹의 2번째부분을말합니다. ReTest7.java에서 group(2) 로출력되는결과를말합니다. 마치며 정규표현식은해당문서에서적은예제말고도, 다양한예제를가질수가있습니다. 예를들자면, 웹프로그래밍에서사용자가입력한문자열중에서 email 주소가있을경우자동으로링크를걸어줄수도있으며, 사용자로부터입력받은문자열을검사하는데에서도이용될수있습니다. 정규표현식을이용하게되면, 문자열을처리하는데있어서여러줄로처리해야할것을간단하게처리할수있다는장점이있습니다. 다만, 정규표현식이라는것을학습해야하지만말입니다. 게으른프로그래머라고들어보았을것입니다. 한번공부하기는어렵고번거롭지만, 한번공부해두면두고두고유용하게써먹을수있는것이정규표현식에대한용법입니다. - 17 -

java.util.regex 에대하여좀더자세히쓰고싶었는데요. 나머지는숙제로맡겨도괜찮겠다라는생각이들어서중지했습니다. 아마도, 저의이름으로책을쓰게될경우에는, 해당문서보다더욱자세한내용을써야겠다라는소망을끝으로글을마칩니다. 읽어주셔서감사합니다. 2003 년 4 월 1 일만우절날김성박. - 18 -