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(和公司)不支持完整的正则表达式,但他们支持扫描集,这就是他在这里使用的。
我需要使用正则表达式从变量中捕获数据。数据可通过以下表格获得: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(和公司)不支持完整的正则表达式,但他们支持扫描集,这就是他在这里使用的。