문자열 검색 필터(*와일드 카드 , 정규식 변환 활용하기)
작업을 하다가 검색 / 필터의 형태로 문자열(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 |
검색하는 과정에서 유용하게 쓰이는 방법이다.
★★☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
Unity) Main Thread Dispactcher (메인 쓰레드에서 사용하기) (0) | 2025.01.27 |
---|---|
Unity Editor) Animator Preview 기능 만들기 (0) | 2025.01.15 |
Unity) 곡선으로 이동 구현 하기(베지어 곡선, 스플라인곡선:Curve Point) (0) | 2025.01.13 |
Unity) 빌드 전/후 처리 순서 확인(IprepreocessBuildWithReport, PostProcessBuildAttribute) (0) | 2025.01.10 |
Unity) 런타임 프로파일링 (Capturing Profiler Stats at Runtime) 고도화 (0) | 2025.01.06 |
댓글