C++正则表达式

C++ regular expression

我需要使用正则表达式从变量中捕获数据。数据可通过以下表格获得:Ip=8.8.8.8&probe=ip/tcp{dst=53} 例如。

为了实现这一点,我正在使用:

char *data;
data = getenv("QUERY_STRING");
char ipt[40];
char probe[40]; 
sscanf(data,"ip=%[0-9a-zA-Z-.]&probe=%[0-9a-zA-Z-.{}/=]",ipt,probe);

第二个字段将始终包含一个 / 但我无法得到这个和其他特殊字符 ({}=)

我能做什么?

我已经试过了:

sscanf(data,"ip=%[0-9a-zA-Z-.]&probe=%[(...)]",ipt,probe); 

也没有成功。

鉴于您知道 probe 部分以 } 结尾,IP 部分以 & 结尾,扫描这些内容可能最简单:

sscanf(input, "Ip=%[^&]&probe=%[^}]", ipt, probe);

一个小细节:scanf使用扫描集或 %s 转换需要指定缓冲区大小以确保安全。没有长度,由于缺乏安全性,两者都几乎等同于 gets,所以你真的想要这样的东西:

char ipt[256], probe[256];
sscanf(input, "Ip=%255[^&]&probe=%255[^}]", ipt, probe);

另请注意,这将为您提供 probe 部分 而没有 尾随 }。如果你真的需要它,你可以使用类似 strncat 的东西在之后重新添加它。

对于那些在看的人:不,scanf(和公司)不支持完整的正则表达式,但他们支持扫描集,这就是他在这里使用的。