최근 C#에서 propkeys.h (C [++]?)를 번역해야했습니다.정규식 반복 및 캡쳐
DEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7);
에 :
내 목표에서 온 것이었다
public static PropertyKey Audio_ChannelCount = new PropertyKey(new Guid("{64440490-4C8B-11D1-8B70-080036B11A03}"));
내가 정규식에 대한 ++ 메모장을 사용했다,하지만 난 나오지도 다른 스크립트 솔루션 (펄, 개방적이야. ..). 컴파일 된 언어를 사용하지 마십시오 (C#, Java ...).
나는이 (작업)으로 돌아가 셨습니다 : 이// TURNS GUID into String
// Find what (Line breaks inserted for convenience):
0x([[:xdigit:]]{8}),\s*0x([[:xdigit:]]{4}),\s*0x([[:xdigit:]]
{4}),\s*0x([[:xdigit:]]{2}),\s*0x([[:xdigit:]]{2}),\s*0x([[:xdigit:]]
{2}),\s*0x([[:xdigit:]]{2}),\s*0x([[:xdigit:]]{2}),\s*0x([[:xdigit:]]
{2}),\s*0x([[:xdigit:]]{2}),\s*0x([[:xdigit:]]{2})
// Replace with:
new Guid\("{$1-$2-$3-$4$5-$6$7$8$9$10$11}"\)
// Final pass
// Find what:
^DEFINE_PROPERTYKEY\(PKEY_(\w+),\s*(new Guid\("\{[[:xdigit:]|\-]+"\)),\s*\d+\);$
// Replace with:
public static PropertyKey $1 = new PropertyKey\($2\);
이 작동하는 동안, 나는 이상한 첫 번째 패스 뭔가를 생각합니다. {2}의 톤을 단지 반복적 인 것으로 바 꾸었습니다. 같은 뭔가 :
(0x([[:xdigit:]]){2},\s*)+
그러나이 그룹에서 작동하지 않습니다. 누군가가 regexes 함께이 일을 "표준"방법을 말해 줄래?