Markdown의 일부 모양은 정규식으로 다루기 쉬워
굵게, 기울임, 인라인 코드, 단순 링크처럼 경계가 짧고 분명한 조각은 정규식으로 찾을 수 있어. 하지만 목록, 인용문, 코드 펜스, 중첩 구문은 줄 사이의 상태까지 봐야 해서 전용 파서의 영역이야.
굵게와 기울임은 처리 순서가 중요해
굵게: \*\*([^*]+)\*\*
기울임: \*([^*]+)\*
별표 두 개를 쓰는 굵게 구문을 먼저 찾지 않으면 기울임 패턴이 그 일부를 잘못 소비할 수 있어.
인라인 코드의 단순한 형태
`([^`]+)`
이 패턴은 백틱 한 쌍 사이에 백틱이 없는 경우만 처리해. 백틱 자체를 포함하려고 더 긴 백틱 경계를 쓰는 실제 Markdown 규칙까지 다루려면 별도 처리가 필요해.
링크와 이미지는 앞의 느낌표로 갈려
\[([^\]]+)\]\(([^)]+)\)
그룹 1은 링크 글자, 그룹 2는 URL을 담아. 중첩 대괄호나 괄호는 처리하지 못하고, 에서도 링크 부분을 잡을 수 있어. 링크만 원한다면 지원 엔진에서 (?<!!)로 앞의 !를 막고, 둘 다 원한다면 !?를 함께 캡처해 종류를 구분해.
제목은 줄 경계와 함께 찾아
^(#{1,6})\s+(.+?)\s*$를 여러 줄 모드로 사용하면 그룹 1의 # 개수로 단계가 정해지고 그룹 2에 제목 글자가 들어가.
문서 전체를 해석한다면 파서를 써
HTML 변환이나 중첩 목록 처리처럼 Markdown 문법 전체가 필요하면 Python의 markdown·mistune, JavaScript의 marked, Rust의 pulldown-cmark 같은 파서를 선택해. 정규식은 범위가 분명한 일회성 수정에 남겨 두는 게 좋아.