2013-07-29 92 views
1

我試圖從格式{{field: value} {field2: value} ... {fieldn: valuen}}模式匹配的重複模式

我被困在{(.*): (.*)}的字符串中提取羣體 - 在RegexTester,它的整個字符串(可以理解)匹配,但在執行時,拋出一個異常 - 「非法重複」

回答

2

首先,{}應該被轉義,因爲它們意味着次重複

其次,我想你想匹配你的字符串只有部分。你可能只允許允許的字符(如[A-Z0-9]),以便進入字符串將不匹配

\\{([a-z0-9]*): ([a-z0-9]*)\\} 

正如在評論中指出,你可以允許除了一些特殊[^{}:]所有字符。如果我沒有記錯的話,你不需要在字符類別中跳過{}

+0

謝謝。你是什​​麼意思:「你可能只允許允許的字符(例如a-z),以便輸入字符串不匹配?」爲什麼沒有。*工作? –

+0

你的正則表達式會匹配任何包含'{',然後是任何東西,然後是「:」,然後是任何東西,而不是}的任何字符串,對於你的例子它只會匹配所有的字符串。 Mine將分別匹配每個字段[示例](http://regexpal.com/?flags=g®ex=%5C%7B(%5Ba-z0-9%5D *)%3A%20(%5Ba-z0-9% 5D *)%5C%7D&input =%7B%7Bfield%3A%20value%7D%20%7Bfield2%3A%20value%7D%20 ...%20%7Bfieldn%3A%20valuen%7D%7D) – RiaD

+0

肯定不想要的字符串不匹配,並仍然適合特殊的正則表達式字符,如「\\ {([^ \\ {\\}:] *):([^ \\ {\\}:] *)\\} 」。這部分[^ \ {\}:]僅匹配不是{,}或:的字符。 –

0

逃生一些字符:

"\\{(.*): (.*)\\}" 

字符}和{有特殊的意義,需要進行轉義。