태그 : 이클립스 검색 search 쿼리검색 정규표현식 IDE
개요
개발중 로직 분석또는, 기존 로직중 특정 테이블을 조작하는 쿼리가 어느 서비스에서 사용되는지 분석하기위해 이클립스에서 어떤 특정 테이블을 SELECT 또는 UPDATE ,INSERT 하는 쿼리를 찾으려할때 정규표현식을 이용한 검색을 어떻게 해야 원하는 결과가 나오는지 확인하려고한다.
내용
SELECT 쿼리 찾기
이클립스에서 SELECT 문과 FTF_EXP_NEGO_DETL을 포함하는 쿼리를 효과적으로 찾기 위해서는 검색 조건을 좀 더 세분화할 필요가 있습니다. 다음과 같은 방법을 시도해 볼 수 있습니다:
1. 여러 줄에 걸친 정규 표현식 사용
이클립스의 검색 기능은 기본적으로 한 줄씩 검색하지만, 여러 줄에 걸친 패턴을 찾기 위해 정규 표현식을 사용할 수 있습니다. 이를 위해서는 줄 바꿈 문자를 포함하는 정규 표현식을 작성해야 합니다.
예를 들어, 다음과 같은 정규 표현식을 사용할 수 있습니다: “SELECT[\s\S]?FROM[\s\S]?FTF_EXP_NEGO_DETL
이 정규 표현식은 SELECT로 시작하고, 여러 줄에 걸쳐 FROM과 FTF_EXP_NEGO_DETL을 포함하는 내용을 찾습니다. [sS]는 모든 문자와 줄 바꿈 문자를 포함합니다.
정규 표현식에서
*?는 가능한 가장 짧은 문자열을 찾는 non-greedy(또는 lazy) 매칭 방식입니다. 이를 통해 패턴에 일치하는 문자열 중 가장 짧은 것을 선택합니다.예를 들어, 다음과 같은 문자열이 있다고 가정해 보겠습니다:
SELECT name, age FROM users WHERE age > 20 ORDER BY name; SELECT id FROM users;
- Greedy 매칭 (
*사용)을 사용한 경우:
- 정규 표현식: `SELECT.*FROM users`
- 매칭 결과: `SELECT name, age FROM users WHERE age > 20 ORDER BY name; SELECT id FROM users`
2. Non-greedy 매칭 (
*?사용)을 사용한 경우:
- 정규 표현식: `SELECT.*?FROM users`
- 매칭 결과: `SELECT name, age FROM users`
Greedy 매칭은 `SELECT`와 `FROM users` 사이의 가능한 가장 긴 문자열을 찾습니다. 반면, Non-greedy 매칭은 `SELECT`와 `FROM users` 사이의 가능한 가장 짧은 문자열을 찾습니다.
Ctrl + H 에서 정규표현식 박스 체크 , 파일패턴 *.xml 로 변경

검색결과 확인

결과 xml파일에서 검색된 내용들

DELETE 쿼리 찾기
2025-02-12 intelij 사용중
xml 파일에서
DELETE
FROM FRM_SYS_MENU_ASSIGN WHERE 1 = 1 AND ORGANIZATION_CODE = #{sysOrganizationCode} AND USER_GROUP_ID = #{userGroupId}이런 SQL 을 찾고싶어서 기존에 배운 정규표현식 내용을 참고하여
아래와 같이
검색 해 보았지만
내가 원하지 않는 것들도 너무많이 검색되었음
현재 문제점
DELETE[\s\S]*?from[\s\S]*?FRM_SYS_MENU_ASSIGN
- [\s\S]*?가 너무 광범위하게 매칭되어 주석과 다른 쿼리까지 포함됩니다.
- 대소문자 구분이 없어서 ‘from’이 주석의 텍스트에서도 매칭될 수 있습니다.
==개선된 정규표현식 제안
DELETE\s+FROM\s+FRM_SYS_MENU_ASSIGN
개선점
- \s+: 최소 1개 이상의 공백만 매칭 (공백, 탭, 줄바꿈)
- 정확한 키워드 매칭 (DELETE, FROM)
- 불필요한 와일드카드 제거
- 테이블명까지 정확히 지정
패턴 해석
- DELETE : DELETE 키워드 정확히 매칭
- \s+ : 하나 이상의 공백문자 매칭
- FROM : FROM 키워드 정확히 매칭
- \s+ : 하나 이상의 공백문자 매칭
- FRM_SYS_MENU_ASSIGN : 정확한 테이블명 매칭