개요

언리얼 코드 작업을 하다보면 특정 대상만 찾고싶을 때가 있다.

그럴 때는 보통 Ide에서는 정규식 탐색을 지원하므로 정규식을 적절히 구성하면 ide에서 원하는대로 검색이 가능하다.

Regex로 함수 찾기

예를 들면 다음을 모두 만족하는 함수를 찾고 싶다고 해보자.

  1. UFUNCFION이고 BlueprintCallable, Pure를 사용하는 함수
  2. int32 타입을 인자로 가지고 있는 함수

그렇다면 아래와 같이 정규식을 구성하면 되는데, *가 와일드 카드고 괄호같은 특수문자들은 \를 붙여야한다는 등의 기초적인 내용은 생략하고 적당한 문법만 설명해둔다.

  UFUNCTION\s*\([^)]*Blueprint(?:Callable|Pure)[^)]*\)[\s\S]*?\bint32\b[\s\S]*?;
  
  • UFUNCTION\s*(

    • \s: 공백(스페이스, 탭, 줄바꿈 등)
    • \s*: 공백(스페이스, 탭, 줄바꿈 등) 0개 이상
  • [^)]*Blueprint(?:Callable|Pure)[^)]*

    • [^)]*: 닫는 괄호 )가 아닌 문자들을 0개 이상 → 괄호 안의 내용을 모두 잡기
  • [\s\S]*?

    • [\s\S]: 공백이든 문자든 모든 문자
    • *?: 비탐욕적 반복 (lazy) → 가능한 최소한의 길이로 일치시키기
  • \bint32\b

    • int32: 찾고 싶은 타입 이름
    • \b: 단어 경계를 의미*

Regex로 변수 찾기

비슷하게 블루프린트에서 사용가능한 타입(예를 들어 BlueprintType struct) 안의 int32 변수가 있는 타입을 찾는다고 하면 아래와 같이 구성할 수 있다.

  UPROPERTY\([^)]*(BlueprintReadWrite|BlueprintReadOnly|VisibleAnywhere|EditAnywhere|EditDefaultsOnly)[^)]*\)[^;]*\int32\b[^;]*;