c에서 multiple token을 처리하기 위해서 strtok을 이용할 수 있습니다. 자바는 split 로 매우 간단하게 처리할 수 있습니다. 그리고 이 메서드는 정규 표현식을 이용합니다. c++에서는 어떻게 하면 좋을까요? 자바의 split가 정규 표현식을 쓴다는 것에 착안하시면 무엇을 써야 할 지 쉽게 알 수 있습니다. 문자열 s를 ,과 .를 구분자로 나누는 예제를 생각해 보겠습니다. 먼저, delimeter는 . 아니면 ,입니다. 따라서, 이를 정규 표현식으로 표현하면 [.,]입니다. 이것은 scan 집합이 . 아니면 ,라는 의미입니다. 그런데, 이들이 한 번 이상 나오면 어떨까요? 예를 들어, 문자열 ",,"이나, "..,"는 어떤가요? 이런 경우도 match가 되게 하려면 regex의 패턴이 ..
파싱 검색 결과
mybatis의 xml 파일에서 '${id}' 이런 식으로 쿼리문을 작성했을 때, 단순히 append가 된다는 것은 저번에 이야기를 해 드렸습니다. 어떻게 이런 일이 일어나는지 조금 깊게 들어가 보도록 하겠습니다. 일단 id는 'or 1 = 1-- 이고, pw는 1234입니다. 이렇게 입력할 겁니다. 실험으로 쓰일 sql 문은 다음과 같이 xml 파일에 작성하였습니다. 일단, 제 Usert 클래스입니다. id, pw, num 필드가 있다는 것을 알 수 있습니다. 다음에, SqlSource를 implements한 DynamicSqlSource 클래스가 있는데요. 이 안에 getBoundSql이 있습니다. 느낌상 이 메서드가 바운드를 시킬 거 같으니, 적당한 위치에 브레이크 포인트를 걸어보겠습니다. 이 때 ..
C언어로 코딩하실 때, 파싱 문제를 만날 때 가장 많이 쓰는 함수는 strtok입니다. 물론, 저는 strchr 조합을 더 많이 쓰긴 합니다만. 익혀두면 편한 쪽은 오늘 소개하는 함수입니다. 함수 원형을 소개하지 않겠습니다. 거의 정석처럼 사용되는 패턴 정도만 소개하도록 하겠습니다. 먼저 '#'을 구분자로 끊어내 봅시다. 보시면 strtok의 1번째 인자에는 parsing을 할, 대상체가 들어가 있습니다. 예를 들자면, "abcd#efg#hijk"와 같은 것들입니다. 그리고, 2번째 인자에는 구분자 집합이 들어가는데요. 여기에서 우리는 '#'을 기준으로 자를 것이므로 '#'만 넣었음을 알 수 있습니다. 12번째 줄이 핵심인데요. strtok는 문자열의 포인터를 리턴해 줍니다. 문자열의 끝에 도달하면, N..
최근댓글