정규식 그룹은 욕심이 많지 않나요?

정규식 그룹은 욕심이 많지 않나요?

sed 일치는 항상 탐욕적입니까?

저는 sed를 사용하여 XML 선언(있는 경우) 뒤에 가능한 한 빨리 XML 파일에 XML 주석을 추가하려고 합니다. 쉘 환경에서는 다음과 같습니다.

sed -e 's/\(<?xml[^?]*?>\)\?$/\1<!-- This is the new comment -->/'

나는 sed가 가장 왼쪽의 일치 항목을 찾고 일치가 시작되는 가장 왼쪽 위치에서 가능한 한 탐욕스러워지기를 원한다는 것을 알고 있습니다. 그러나 선택적 그룹은 아래와 같이 XML 선언과 일치하지 않습니다.

<?xml version="1.0" encoding="utf-8"?>

대신 빈 문자열과 일치하도록 선택하므로 주석이 XML 선언 앞에 추가됩니다. 왜 그런 겁니까?

그룹을 강제로 설정하면 예상대로 일치합니다.

答え1

아. 문서는 UTF-8 BOM으로 시작됩니다.

따라서 빈 문자열 일치는 BOM 이전에 발생하며 BOM 이후의 "예상" 일치는 가장 왼쪽의 가능한 일치가 아닙니다.

関連情報