게시판 본문 ASP, ASP.NET, IIS & Script - Read Only

re: html tag를 없애는 정규식에서의 궁금증
작성자: 송원석
작성일시: 2004-04-30 22:15,  조회수: 3,332
이 질문을 하셨다는 건 이미 요점을 대부분 파악하셨다는 뜻으로 생각되어 반갑네요. ^_^

제가 만들어낸 정규 표현식 패턴의 논리적인 내용의 근거는 다음과 같습니다. 아마도 아까 말씀하셨던 예제의 정규 표현식 패턴은 아마 그 글을 작성하셨던 분도 어디선가에서 보시고 그냥 가져다 사용하시는 것일 가능성이 매우 높습니다. 왜냐하면 . 문자를 사용했다는 것은 알파벳으로만 이루어진 언어를 사용하는 국가의 프로그래머가 작성했을 확률이 상당히 높다는 증거이기 때문입니다. 이를테면 그 정규 표현식 패턴을 사용하는 경우 <한글> 과 같은 문자열도 짤려버릴텐데 국내 실정상 신문 기사의 제목같은 경우에는 의외로 꺽쇠 기호가 사용되는 경우가 적지 않죠.

그래서 한글이 아닌 꺽쇠 다음의 임의의 문자라는 개념을 구현하기 위해서 [a-zA-Z\/\s] 라는 패턴이 나온 것입니다. 그리고 ? 문자와 같은 역활을 하는 부분이 바로 뒤에 추가된 [^>] 패턴인데 이 패턴 때문에 지금까지 설명드린 조건을 만족하면서도 < 문자와 > 문자 사이에 > 문자가 하나도 없는 문자열들만을 뽑아내는 것이죠. 아, ^ 문자가 [ ] 내부에 사용되면 NOT 의 의미를 지니거든요.

물론 제 논리도 어떤 경우에는 문제가 있습니다. 예를 들면 꺽쇠 문자가 크거나 작다는 수학적인 의미로 사용되는 경우에는 오동작 할 가능성이 있습니다. 사실 솔직히 말씀드리면 제가 지금 사용하는 정규 표현식 패턴은 제가 정규 표현식에 대해서 그다지 잘 이해하지 못하고 있을 때 작성했던 것을 지금도 그냥 생각없이 사용하고 있는 것입니다. 어짜피 제 사이트 내에서만 사용하고 있기 때문에 나중에 문제가 되면 고치지 하는 게으른 생각으로 말입니다. ^_^;;;

그렇기 때문에 두 가지 패턴이 모두 만족스럽지 못하시다면 직접 두 가지 패턴을 섞어서 새로 작성한 다음 사용하셔도 전혀 무방합니다. 이를테면 <[a-zA-Z\/\s]+?> 이렇게 말입니다. 그러나 이 패턴의 경우에는 또 다른 문제가 생기겠죠. INPUT 태그의 Value 속성에 한글 문자열이 들어가 있다면 또 오동작을 할 테니까요. 이처럼 쉬우면서도 어려운 것이 정규 표현식 패턴인데 결국 이러한 패턴을 논리적으로 작성하는 능력이 곧 정규 표현식의 실력인 것입니다. 인터넷을 뒤져보면 무수히 많은 패턴들을 쉽게 찾아보실 수 있는데 구글 같은 곳에서 regular expression 으로 검색해 보시면 금방 적절한 예제를 찾으실 수 있을 것입니다.

그리고 테이블 너비 조정 예제와 같은 경우에는 솔직히 약간의 억지가 있는 것이 사실입니다. 개인적으로 당시에는 그 강좌를 작성하면서 어떻게든 현실상에서 실제로 발생한 문제를 예제로 삼아서 정규 표현식으로 한 번에 해결하는 모습을 여러분들께 보여드리고 싶었습니다. 그래서 적절한 실제 질문을 찾기 위해서 여기저기 게시판을 뒤지고 다니기도 했었구요. 그만큼 그 당시에는 ASP 프로그래머분들 중에서 정규 표현식을 사용하는 분들이 드물었기 때문에 이렇게 좋은 기술이 존재하고 있다는 사실을 강력하게 보여드리고 싶었거든요. ^_^;;;

그러나 사실 그때나 지금이나 제가 생각하는 바는 이렇습니다. 어떤 기술이 좋다고 그 기술 하나만으로 모든 것을 해결할 수는 없지 않을까요? 정규 표현식이 효과적인 곳에서는 정규 표현식을 사용하고 InStr() 함수와 Mid() 함수가 효과적인 곳에서는 그 함수들을 사용하면 되는 것이 아닐까요? 아무리 정규 표현식이 좋다고 해도 모든 것을 정규 표현식만으로 한 번에 해결할 수는 없다고 생각합니다. 그래서 저도 실제로 프로그램을 작성할 때는 상황에 맞추어 적절히 섞어서 사용하는 편입니다. 말씀하신 상황 설정에서도 아마 정규 표현식만으로 해결하고자 하시는 생각을 바꾸신다면 금방 머리속에서 그림이 그려지실 것 같습니다. 아마 지금 이 순간에도 머리속에 방법이 떠오르실 지도 모르겠구요. ^_^

결론적으로는 제가 개인적으로 가장 강력하다고 생각하는 방법은 이런 방법입니다. 정규 표현식 개체에서 제공되는 Replace() 메소드는 그 자체만으로도 매우 강력하기는 하지만 자체의 처리 패턴이 너무 굳어져 있어서 다양한 경우를 완벽하게 해결하기가 힘든 경우가 많다고 생각합니다. 그래서 대신 Execute() 메소드를 선호하는데 이 메소드는 패턴과 일치하는 문자열들을 단지 찾아주기만 할 뿐이지만 그 검색 결과가 상당히 세밀하기 때문에, 즉 패턴과 일치하는 문자열이 시작되는 인덱스, 그 문자열의 길이, 그 문자열의 값, 그 문자열 내에 존재하는 부분일치 문자열의 상세한 정보들을 모두 리턴해 주기 때문에 상당히 유용합니다. 그래서 먼저 Execute() 메소드로 작업의 대상이 되는 문자열들을 찾아서 검색한 후 그렇게 검색된 문자열들을 일반적인 문자열 편집 함수와 정규 표현식의 Replace() 메소드를 섞어서 사용하여 원하는 방향으로 처리를 합니다. 거의 대부분의 경우가 이런 방법을 사용하면 풀리더군요.

따라서 같은 요령으로 '1. 이미지 경로 태그가 있는 곳을 찾아내서' 부분과 '2. 경로에서 이미지 파일명을 분리한 다음' 부분은 Execute() 메소드를 활용하고 '3. 통일된 경로 (지정경로) 에 이미지 파일명을 붙여서 기존 것과 대체' 하는 부분은 일반적인 문자열 편집 함수를 사용하면 원하시는 바를 쉽게 구현하실 수 있을 것 같습니다. 그리고 마지막으로 이 포럼의 311 번 게시물의 질문과 답변들을 한 번 읽어보시기 바랍니다. 제 생각에는 샘플로 구현해보시고자 하는 내용과 완전히 같지는 않습니다만 상당히 유사한 부분들이 일부 존재하는 것 같네요. ^_^

감사합니다.

IP 주소: 61.84.83.136
전체 1 건의 댓글이 존재합니다.

전C

May day군요. 풍족한 답변에 고개숙입니다. 역시, 응용, 창조(?)적 노동은 필연적 숙명인가 봅니다? ^_^
2004-05-01 09:58
전체 2,095 건의 게시물, 84 페이지로 구성된 ASP, ASP.NET, IIS & Script 게시판의 71 페이지입니다.
게시물
364

html tag를 없애는 정규식에서의 궁금증

전C

2004-04-30 5,459
363

re: html tag를 없애는 정규식에서의 궁금증

송원석

2004-04-30 3,295
362

re: html tag를 없애는 정규식에서의 궁금증

전C

2004-04-30 3,713

re: html tag를 없애는 정규식에서의 궁금증 [1]

송원석

2004-04-30 3,332
360

배열에 대해 궁금한게 있는데요..

오마르

2004-04-29 1,036
359

re: 배열에 대해 궁금한게 있는데요.. [1]

송원석

2004-04-29 3,037
358

안녕하세요~ ^^

오마르

2004-04-28 879
357

re: 안녕하세요~ ^^

송원석

2004-04-28 2,937
356

ㅎㅎ 접니다.

궁금이

2004-04-28 967
355

re: ㅎㅎ 접니다.

송원석

2004-04-28 3,415
354

re: ㅎㅎ 접니다. (메일 주소 입니다) [1]

궁금이

2004-04-28 879
353

클래스로 DB 입,출,삭제한다면?

김지영

2004-04-27 897
352

re: 클래스로 DB 입,출,삭제한다면? [1]

송원석

2004-04-27 3,065
351

안녕하세요~ 클레스에서 궁금한거요 ^^

오마르

2004-04-27 959
350

re: 안녕하세요~ 클레스에서 궁금한거요 ^^ [1]

송원석

2004-04-27 3,147
349

안녕하세요~ 정규식에서요~ ^^

오마르

2004-04-26 949
348

re: 안녕하세요~ 정규식에서요~ ^^ [1]

송원석

2004-04-26 3,226
347

파일큐브, 윈도우2000 서버와 윈도우XP에서의 차이점은?

영호

2004-04-25 983
346

re: 파일큐브, 윈도우2000 서버와 윈도우XP에서의 차이점은?

송원석

2004-04-25 3,110
345

아..........답답해서.....도와주세요...

최경우

2004-04-24 995
344

re: 아..........답답해서.....도와주세요... [1]

송원석

2004-04-25 2,978
343

즐거운 주말되세요~ ^^ [1]

오마르

2004-04-24 889
342

질문 할꼐 많은데 한번에 싸잡아서 작성합니다.

궁금이

2004-04-23 1,021
341

re: 질문 할꼐 많은데 한번에 싸잡아서 작성합니다.

송원석

2004-04-24 3,515
340

RSS 에 대한 질문이 있는데요.. [1]

오마르

2004-04-23 1,009