我很难理解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;,我只是在寻找 这是我的名字 部分。
我做错了什么?
答案 0 :(得分:1)
只需使用lookbehind捕获字符串Name
之后的字符,直到第一个"
符号,
(?<=Name=\")([^\"]*)
<强>解释强>
(?<=Name=\")
将匹配标记设置在字符串Name"
([^\"]*)
捕获不是"
零次或多次的所有字符。答案 1 :(得分:1)
您可能不需要捕获组。
假设您的图书馆有后台(如果它的PCRE肯定会这样做),您可以使用此正则表达式来匹配名称:
(?<=[Nn]ame=")[^"]+
请参阅regex demo。
<强>解释强>
(?<=[Nn]ame=")
声称前面的内容是Name="
或name="
[^"]+
匹配一个或多个不是"
<强>参考强>