2011-07-20 84 views
1

如何創建以下問題正則表達式:如何從正則表達式搜索中排除單詞?

我有一個字符串,
name1=value1;name2=value2;.....;

某處,存在一對, "begin=10072011;" 我需要的,正則表達式,從解析字符串all name = value;對,其中的值是一個數字。不過,我想忽略的名字begin

目前,我有以下的正則表達式:

([\\w]+)=([\\d]+); 

礦選擇begin名。我如何將其更改爲不包含begin

回答

5

(?!begin)\b(\w+)=(\d+);

這使用負先行,因此,如果字符串以「開始」啓動時,它會不匹配。 \b是必要的,以便正則表達式不會跳過「b」並匹配「egin = ...」。

請注意,當描述正則表達式時,您應該只使用單個反斜槓進行轉義,但對於某些語言,您將需要使用雙反斜槓來反轉反斜槓。

+0

謝謝!是的 - 使用C++字符串的雙斜槓 – Olympian

1

這應做到:

\b(?!begin=)(\w+)=(\d+)\b 

由於非晶碳++字符串字面它應該是這樣的:

"\\b(?!begin=)(\\w+)=(\\d+)\\b" 

\bword boundary;你用它來確保你匹配整個單詞(因爲「單詞」是在正則表達式中定義的;請仔細閱讀該頁面)。例如,如果沒有第一\b的正則表達式將正確不匹配

begin=1234 // OK 

...但那就跳到一個位置和匹配:

egin=1234 // oops! 
0

我認爲(?<=begin=)\d+(?=;)將是一個更好的選擇。

如果您將所有信息保存爲XML格式,則工作將比現在容易得多。

+0

在任何情況下,我都不會同意這個答案,但Qt的'QRegExp'風格似乎不支持lookbehinds。 ([參考](http://doc.trolltech.com/latest/qregexp.html#assertions)) –