2012-01-30 75 views
0

我有以下字符串格式。我们有任何模式匹配的字符串搜索吗?/

({'BTAddress': <'00:22:58:07:76:9B'>, 'Name': <'Some-Name'>, 'Alias': <'some-Name'>, 'Class': <uint32 12316>, 'Adapter': <objectpath '/org/bluez/3196/hci0'>},) 

我想解析上面的字符串C.而不是做原始解析,任何建议使用模式明智的解析? 感谢您的帮助。

+0

你想解析C中的JSON字符串吗?如果你用这种方式说明问题,你可能会得到不同的回答。 – selbie 2012-01-30 09:27:41

回答

1

您可以使用strtokhttp://www.cplusplus.com/reference/clibrary/cstring/strtok/。 你将不得不做一些手工工作,但它工作正常。

注意char指针,你通过将被操纵!

+0

strtok似乎是一个明显的解决方案,但是如果他试图通过strtok'ing代替逗号(“,”)来分隔每个键:值对,那么如果逗号出现在集合中的某个值的引号内,可能会变得杂乱。 – selbie 2012-01-30 09:31:19

+0

我会建议'strtok()'非常接近“*正在执行原始解析*” – Clifford 2012-01-30 09:33:24

+0

我会开始将字符串分离为键值标记。然后,您可以分离令牌并删除开始和结束。 这是非常原始的解析,但没有指定你想解析什么样的字符串..结合它与正则表达式像omu_nergu建议看起来也很好。 – ezdazuzena 2012-01-30 10:02:35

1

任何POSIX兼容的C编译器应该提供<regex.h>,为您提供应该能够提供帮助的正则表达式。

+0

不知道如果我错了,我看着正则表达式,我没有看到的方式来获取键/值的方法?..任何建议? – Whoami 2012-01-31 06:16:24

0

我的建议如下:

A) try using strtok to split the text at ',' and then split the resulting subtexts only once at ':' ,that way you would get the key,value pairs you desire. 
B) use a regEx api under C that would basically solve your issue. 

而且我可能会建议在C寻找键值存储为您解析文本(C++有一个,但我真的不知道C)

+0

你可以提供关于C++中的键/值的附加细节吗? – Whoami 2012-01-31 05:58:34