最近、propkeys.h (C[++]?) を 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}"));
正規表現に Notepad++ を使用していましたが、他のスクリプト可能なソリューション (perl、sed...) を使用できます。コンパイル済み言語 (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*)+
しかし、それをグループで動作させることはできません。誰かが正規表現でこれを行う「標準的な」方法を教えてもらえますか?