Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

RegularExpression/2011년스터디: Difference between revisions

From ZeroWiki
imported>zeldababo
No edit summary
 
imported>jereneal20
No edit summary
 
(23 intermediate revisions by 4 users not shown)
Line 1: Line 1:
__TOC__
== 참여자 ==
== 참여자 ==
멘토 : 변형진
멘토 : 변형진
Line 11: Line 13:
=== 정규표현식은 뭔가? ===
=== 정규표현식은 뭔가? ===


Regular Expression이지용
Regular Expression입니다.


우리가 배운걸 순서대로 쭉 적어볼까요
우리가 배운걸 순서대로 쭉 적어볼까요
Line 18: Line 20:
html을 띄워놓고 익스플로러 or 크롬의 개발자 도구에서 javascript 콘솔모드로 "문장".matches("\Regex\"); 하면 나온답니다용.  
html을 띄워놓고 익스플로러 or 크롬의 개발자 도구에서 javascript 콘솔모드로 "문장".matches("\Regex\"); 하면 나온답니다용.  


java에서는 matcher를 통해서.
java에서는 Matcher를 통해서. (맞는지 잘 모르겠당)
Pattern.comppile("정규표현식");
Matcher matcher = new Matcher(Pattern, "찾을 텍스트");
matcher.find();


-틀렸으면 수정
-틀렸으면 수정
Line 31: Line 36:
   
   
  괄호 안에서의 ^ 괄호 밖에서의 ^
  괄호 안에서의 ^ 괄호 밖에서의 ^
 
. == 문자(모든 것) 하나
=== 2주차 ===
* == 앞의 문자(명령)를 0개 이상 연속으로 찾을 때.
e.g.  '''.*''' 로 하면 여러 문자(모든 것)을 0개 이상 받아옵니다.
+ == 앞의 문자(명령)를 1개 이상 연속으로 찾을 때.
[]대괄호. == 찾을 문자들을 넣으면 됨. a-zA-Z 라던지, 0-9라던지.
$ 앞의 명령을 마지막으로 하는 것들을 찾음.
{}중괄호 == 갯수 지정가능. {0,2} 이면 0~2개사이의 갯수를 찾음.
()소괄호 == 명령들을 |로 여러가지 나타낼 수 있음.
== 2주차 ==


복습 및 예제 코드 작성
복습 및 예제 코드 작성
==== 문제1 ====
=== 문제1 ===
  <a herf ="dfdf"></a>
  <a herf ="dfdf"></a>
  여기서  
  여기서  
Line 42: Line 54:
   
   
  answer : <.+?>
  answer : <.+?>
문제
 
=== 문제2 ===
  태그 안의 손상된 " "을 검색하여라
  태그 안의 손상된 " "을 검색하여라
  예제 <a herf = "class > </a>
  예제 <a href = "class > </a>
<a href = "class" > </a>
<a href = "clas"s" > </a>


실제 예제
실제 예제
Line 58: Line 73:
  answer : <([^">]+|"[^">]*")+"[^">]*>
  answer : <([^">]+|"[^">]*")+"[^">]*>


답이 절대 적인것은 아님.
답이 절대 적인것은 아니고, 효율의 차이는 있을 수 있음.


효율의 차이는 있을 수 있음.
저것에 대한 답을 찾아냈다면, 맞는것들'만' 찾아내는 것도 해보는건 어떨까요? 그러려면 표준을 알아야 한다는...
=== 문제 3 ===
간단한 JavaScript 예제
"http://www.naver.com www.naver.com naver.com google.co.kr http://kio.zc.bz/Lecture/regexp.html#chap05".match(/(http:\/\/)?([a-zA-Z]+\.)+[a-zA-Z]+\/?([^\s]+)*/g)
또 다른 예제 (저번시간과 유사함) 스크립트에서 괄호가 제대로 열리고 닫혔는지, 제대로 닫히지 않은 케이스를 뱉어줌.
  var str='<body onload="firprint(;" onkeydown="keyboard);"> <input value="pause" onclick="pause();"/>';
  str.match(/\s[^()\s]*([^()]*[)]|[(][^()]*)/g);
으.. 아깐 제대로 됐는데 지금은 또 안되네요 --
* 이게 뭐였을까요 -ㅅ- -[[김태진]]
str.match(/\s[^()\s]*([^()]*[)]|[(][^()]*)/g);
str.match(/\s([(][^(]*|[^)][)])*/g);
str.match(/((http:[^\s]*)|((\s[^/.]*[.][^/.]*)))\s/g);
  ((3*4)+2+4)-(23)) ((3*4)+(2+4)-23)) ((3*4)+(2+4)-(23)) (3*4)+(2+4)-(23)) ((3*4)+(2+4-(23))
------------------------
[[2011년활동지도]], [[RegularExpression]]



Latest revision as of 15:44, 10 January 2012

참여자

멘토 : 변형진 인원 : 김수경 김준석 김태진 서지혜

목표

Regular Expression을 정의하고 더러운 상황에 대한 Regex의 강력함을 느껴보자.

1주차

정규표현식은 뭔가?

Regular Expression입니다.

우리가 배운걸 순서대로 쭉 적어볼까요

어디서 연습할 수 있나?

html을 띄워놓고 익스플로러 or 크롬의 개발자 도구에서 javascript 콘솔모드로 "문장".matches("\Regex\"); 하면 나온답니다용.

java에서는 Matcher를 통해서. (맞는지 잘 모르겠당)

Pattern.comppile("정규표현식");
Matcher matcher = new Matcher(Pattern, "찾을 텍스트");
matcher.find();

-틀렸으면 수정

문법은?

. * + [] ^ $ | {} () \

[A-Za-Z0-9]
\w \W
\s \S

괄호 안에서의 ^ 괄호 밖에서의 ^

. == 문자(모든 것) 하나

  • == 앞의 문자(명령)를 0개 이상 연속으로 찾을 때.
e.g.   .* 로 하면 여러 문자(모든 것)을 0개 이상 받아옵니다.

+ == 앞의 문자(명령)를 1개 이상 연속으로 찾을 때. []대괄호. == 찾을 문자들을 넣으면 됨. a-zA-Z 라던지, 0-9라던지. $ 앞의 명령을 마지막으로 하는 것들을 찾음. {}중괄호 == 갯수 지정가능. {0,2} 이면 0~2개사이의 갯수를 찾음. ()소괄호 == 명령들을 |로 여러가지 나타낼 수 있음.

2주차

복습 및 예제 코드 작성

문제1

<a herf ="dfdf"></a>
여기서 

<a herf ="dfdf"> 찾기

answer : <.+?>

문제2

태그 안의 손상된 " "을 검색하여라
예제 <a href = "class > </a>
<a href = "class" > </a>
<a href = "clas"s" > </a>

실제 예제

<html>
<a href ="abc"></a>
<a href ="abc"></a>
<a href ="dfw"></a>
<a href ="dfdof></a>
<a href ="dfdof class="dfdfd"></a>
<a href ="dfdof" class=dfdfd" name ="cdef"></a>
</html>

answer : <([^">]+|"[^">]*")+"[^">]*>

답이 절대 적인것은 아니고, 효율의 차이는 있을 수 있음.

저것에 대한 답을 찾아냈다면, 맞는것들'만' 찾아내는 것도 해보는건 어떨까요? 그러려면 표준을 알아야 한다는...

문제 3

간단한 JavaScript 예제

"http://www.naver.com www.naver.com naver.com google.co.kr http://kio.zc.bz/Lecture/regexp.html#chap05".match(/(http:\/\/)?([a-zA-Z]+\.)+[a-zA-Z]+\/?([^\s]+)*/g)

또 다른 예제 (저번시간과 유사함) 스크립트에서 괄호가 제대로 열리고 닫혔는지, 제대로 닫히지 않은 케이스를 뱉어줌.

  var str='<body onload="firprint(;" onkeydown="keyboard);"> <input value="pause" onclick="pause();"/>';


 str.match(/\s[^()\s]*([^()]*[)]|[(][^()]*)/g);

으.. 아깐 제대로 됐는데 지금은 또 안되네요 --

str.match(/\s[^()\s]*([^()]*[)]|[(][^()]*)/g);
str.match(/\s([(][^(]*|[^)][)])*/g);
str.match(/((http:[^\s]*)|((\s[^/.]*[.][^/.]*)))\s/g);

 ((3*4)+2+4)-(23)) ((3*4)+(2+4)-23)) ((3*4)+(2+4)-(23)) (3*4)+(2+4)-(23)) ((3*4)+(2+4-(23))

2011년활동지도, RegularExpression