libc6
의 regexp 기능 regcomp
및 regexec
을 멀티 바이트 문자로 제대로 작동 시키려면 어쨌든 존재합니까?libc의 멀티 바이트 문자 regcomp 및 regexec
예를 들어, 내 패턴이 utf8 문자 猫机+猫
인 경우 utf8로 인코딩 된 문자열 猫机机机猫
에서 일치하는 것이 발견되면 성공할 것입니다.
문자 机
의 바이트 표현이 \xe6\x9c\xba
이고 +
이 하나 이상의 바이트 \xba
과 일치하기 때문입니다. 이 인스턴스는 패턴의 각 멀티 바이트 문자 주위에 괄호를 넣어서 만들 수 있지만이 패턴은 응용 프로그램 용이므로 사용자가이 작업을 수행하도록 요구할 수는 없습니다.
패턴이나 문자열에 utf8 문자가 포함 된 것으로 일치하도록 플래그를 지정하는 방법이 있습니까? 아마도 libc
에 char 대신 wchar으로 패턴을 저장한다고 말하고 있을까요?
멀티 바이트 문자 주위의 팸플릿이 도움이되지 않습니까? – stark
나는 그것을 할 수 있지만, 나는 그런 식으로 패턴을 바꿀 필요가없는 해결책을 기대하고있다. 그래도 감사합니다! 귀하의 의견을 반영하기 위해 질문을 편집했습니다. –
왜 코드 포인트'\ x {nnnnnnn}'을 사용하지 않는 것이 좋을까요? 즉, 정규 표현식 엔진이 유니 코드를 지원해야하는 경우입니다. 보통 정규식과 대상 문자열은 동일한 인코딩을 사용해야하지만 정규식 문자열 내에서 리터럴 유니 코드 문자를 사용하는 것은 좋지 않습니다. 엔진이 그것을 지원하면 바이트 단위가 아닌 char 단위로 char을 읽습니다. – sln