C正则表达式捕获组

时间:2014-07-09 09:26:54

标签: c regex parsing

我很难理解C中的正则表达式是如何工作的。 基本上我有一个XML文件(我不能使用XML解析器)包含这样的行:

<Node Bla="blabla" Name="this is my name" .... />
<Node Name="this is my name" Bla="blabla" .... />

我想要做的是提取每一行的名称部分。到目前为止,我一直在使用以下正则表达式:

char *regex_str = "Name=\"([^\"]*)\"";

但这给了我Name =&#34;这是我的名字&#34;,我只是在寻找 这是我的名字 部分。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

只需使用lookbehind捕获字符串Name之后的字符,直到第一个"符号,

(?<=Name=\")([^\"]*)

<强>解释

  • (?<=Name=\")将匹配标记设置在字符串Name"
  • 之后
  • ([^\"]*)捕获不是"零次或多次的所有字符。

答案 1 :(得分:1)

您可能不需要捕获组。

假设您的图书馆有后台(如果它的PCRE肯定会这样做),您可以使用此正则表达式来匹配名称:

(?<=[Nn]ame=")[^"]+

请参阅regex demo

<强>解释

  • lookbehind (?<=[Nn]ame=")声称前面的内容是Name="name="
  • [^"]+匹配一个或多个不是"
  • 的字符

<强>参考