2012-01-30 42 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