如何为以下问题创建正则表达式:
我有一个字符串,
name1=value1;name2=value2;.....;
某处,有一对,
"begin=10072011;"
我需要使用正则表达式从字符串中解析所有name = value;对,其中值是数字。但是,我想忽略名称begin
目前我有以下正则表达式:
([\\w]+)=([\\d]+);
我选择begin
名称。如何将其更改为不包含begin
?
答案 0 :(得分:5)
(?!begin)\b(\w+)=(\d+);
这使用负向前瞻,因此如果字符串以“begin”开头则不匹配。 \b
是必要的,因此正则表达式不会跳过“b”并匹配“egin = ...”。
请注意,在描述正则表达式时,您只应使用单个反斜杠进行转义,但对于某些语言,您需要使用双反斜杠来转义反斜杠。
答案 1 :(得分:1)
这应该这样做:
\b(?!begin=)(\w+)=(\d+)\b
作为aC ++字符串文字,它看起来像这样:
"\\b(?!begin=)(\\w+)=(\\d+)\\b"
\b
是word boundary;你用它来确保你匹配整个单词(因为“单词”在正则表达式的上下文中定义;仔细阅读该页面)。例如,如果没有第一个\b
,正则表达式将无法正确匹配
begin=1234 // OK
...但是它会跳过一个位置并匹配:
egin=1234 // oops!
答案 2 :(得分:0)
我认为(?<=begin=)\d+(?=;)
将是更好的选择。
如果您保留XML格式的所有信息,那么工作将比现在容易得多。