如何从正则表达式搜索中排除单词?

时间:2011-07-20 18:21:34

标签: regex qt find

如何为以下问题创建正则表达式:

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

某处,有一对, "begin=10072011;" 我需要使用正则表达式从字符串中解析所有name = value;对,其中值是数字。但是,我想忽略名称begin

目前我有以下正则表达式:

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

我选择begin名称。如何将其更改为不包含begin

3 个答案:

答案 0 :(得分:5)

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

这使用负向前瞻,因此如果字符串以“begin”开头则不匹配。 \b是必要的,因此正则表达式不会跳过“b”并匹配“egin = ...”。

请注意,在描述正则表达式时,您只应使用单个反斜杠进行转义,但对于某些语言,您需要使用双反斜杠来转义反斜杠。

答案 1 :(得分:1)

这应该这样做:

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

作为aC ++字符串文字,它看起来像这样:

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

\bword boundary;你用它来确保你匹配整个单词(因为“单词”在正则表达式的上下文中定义;仔细阅读该页面)。例如,如果没有第一个\b,正则表达式将无法正确匹配

begin=1234   // OK

...但是它会跳过一个位置并匹配:

egin=1234    // oops!

答案 2 :(得分:0)

我认为(?<=begin=)\d+(?=;)将是更好的选择。

如果您保留XML格式的所有信息,那么工作将比现在容易得多。