2010-10-30 48 views
0

我正在使用C++下的Boost庫來解析文本的負載。我似乎有這個字符串Boost正則表達式不正確的語法

text text text Seat 6: player_name (11,111) text text text 

我想匹配的中間位,座位號可以是1到9之間的任何一個問題,PLAYER_NAME可以是任何字符A-ZA-Z和包括數字* _。和括號中的值可以是0到1,000,000,應該包括','

我有這個正則表達式在c#中工作,但不會在boost下工作,它不匹配,我不明白爲什麼在我的RegexBuilder它的回來是正確的:

Seat (?<seat_id>[0-9]): (?<player_name>[A-Z0-9]{1,}) (?<stack_size>\([0-9,]{1,}\)) 

任何想法?我將會忽略<>,因爲我只是想匹配字符串而不用擔心個別值。

謝謝,R.快樂holloween。

回答

0

玩家的名字可以包含小寫字母,但這不是你的代碼所說的。代碼表示player_name只能是數字和大寫字母。也許在你的C#代碼中,你設置了一個標誌來省略檢查的大小寫敏感性。在Boost中,這是regex_constants::icase;在創建regex對象時使用它。

此外,請記住regex_match要求表達式匹配整個輸入字符串。如果您想知道輸入中的正則表達式是否與任何地方的匹配,請改爲使用regex_search

+0

謝謝,icase信息非常有用。出於某種原因,它在正則表達式的最後部分失敗,它似乎不喜歡\([0-9,] {1,0} \),我不知道我錯在哪裏。它可以是從100到1,000,000的值。出於某種原因,我無法讓它匹配,不知道爲什麼。啊,regex_search也是我正在尋找...謝謝。 – flavour404 2010-10-30 07:42:29

+1

您之前沒有寫過「{1,0}」。你只會說'{1,}'。這個新值意味着你至少需要一位數字,但不能超過零。這顯然從來不匹配任何東西如果你想說「一個或多個」,那麼通常只寫'+'。我擔心你實際上不知道你的目標是什麼,因爲你在描述它時如此不一致。 (座位號應該是「1到9之間的任何值」,但是正則表達式中的[[0-9]'。堆棧大小「可以是0到1,000,000」,或者「從100到1,000,000」)大寫字母數字計數。 )退一步找出你需要的東西。 *然後*編寫代碼。 – 2010-10-30 09:54:46