본문 바로가기
개발/Unity

개발) 문자열 검색 필터(*와일드 카드 , 정규식 변환 활용하기)

by 테샤르 2025. 1. 31.

문자열 검색 필터(*와일드 카드 , 정규식 변환 활용하기)

 

작업을 하다가 검색 / 필터의 형태로  문자열(String)을 검색하는 과정에서

흔히 많이 사용하는 와일드 카드(*)를 가지고 검색을 하는 코드를 간단하게  포스팅한다.

 

 

 

반응형

< 코드 >

/// <summary>
/// 와일드카드(*를 포함한) 검색을 처리하는 함수 (GameObject 리스트를 필터링)
/// </summary>
/// <param name="list">GameObject 리스트</param>
/// <param name="query">검색 쿼리 (와일드카드 지원, 자동 처리)</param>
/// <returns>필터링된 GameObject 리스트</returns>
private List<GameObject> FilterWithWildcard(List<GameObject> list, string query)
{
    if (list == null || string.IsNullOrEmpty(query))
    {
        return new List<GameObject>(); // 입력값 검증
    }

    // 검색 쿼리에 '*'가 포함되지 않으면 자동으로 '*query*' 형태로 변환
    if (!query.Contains("*"))
    {
        query = $"*{query}*";
    }

    // 와일드카드(*)를 정규식으로 변환
    string regexPattern = "^" + Regex.Escape(query).Replace("\\*", ".*") + "$";
    Regex regex = new Regex(regexPattern, RegexOptions.IgnoreCase);

    // 필터링
    return list
        .Where(obj => obj != null && obj.name != null && regex.IsMatch(obj.name))
        .ToList();
}

 

반응형

 

< 예제 코드 >

List<GameObject> gameObjects = new List<GameObject>
{
    new GameObject("Player"),
    new GameObject("Enemy"),
    new GameObject("BossEnemy"),
    new GameObject("NPC_Vendor"),
    new GameObject("Object123"),
};

List<GameObject> result = FilterWithWildcard(gameObjects, "Enemy*");

 

검색어 변환후 수정 정규식 변환 매칭되는 항목
"Enemy*" "Enemy*" ^Enemy.*$ Enemy, BossEnemy
"*NPC*" "*NPC*" ^.*NPC.*$ NPC_Vendor
"Boss*" "Boss*" ^Boss.*$ BossEnemy
"*or*" "*or*" ^.*or.*$ NPC_Vendor, Object123

 

검색하는 과정에서 유용하게 쓰이는 방법이다.

 

★★☆☆☆

 

반응형

댓글