我正在尝试使用正则表达式解析url参数。
这是我的网址:
http://127.0.0.1/privet/register?action=cancel&user=xx.gcp234@gmail.com
虽然很简单,但有人可以协助我为以下URL参数编写正则表达式:
action=cancel&user=xx.gcp234%40gmail.com
这是我的正则表达式: " / ^([\ A-Z .-])\ =([\ A-Z .-])$ /
我只需要打印以下信息:
动作=取消
user = xx.gcp234@gmail.com
并将其作为JSON格式的字符串发回。
非常感谢任何帮助。
由于
答案 0 :(得分:2)
使用Unix Linux Forums使用regex.h
库(在unix中提供)从Corona688发布的帖子中获取并返回=
之后由&
分隔的参数的咬合位置。如果您不使用Unix,则必须查找并下载正则表达式库。
#include <stdio.h>
#include <regex.h>
int main(void)
{
regex_t reg;
const char *regex="([^=&?]+)=([^&]+)";
const char *str="http://127.0.0.1/privet/register?action=cancel&user=xx.gcp234@gmail.com";
regmatch_t matches[16];
regcomp(®, regex, REG_EXTENDED);
if(regexec(®, str, 16, matches, 0) == 0)
{
printf("regex /%s/ matched string '%s' at bytes %d-%d\n",
regex, str, matches[0].rm_so, matches[0].rm_eo);
}
else
printf("regex /%s/ does not match string '%s'\n", regex, str);
}
答案 1 :(得分:0)
以下代码段解析网址
http://127.0.0.1/privet/register?action=cancel&user=xx.gcp234@gmail.com
regex_t reg;
const char *regex = "([^=&?]+)=([^&]+)";
//const char *regex = "action=(\w*)&user=(\S*)";
const char *str = "http://127.0.0.1/privet/register?action=cancel&user=xx.gcp234@gmail.com";
LOGDEBUG("r->uri : %s\n", r->unparsed_uri);
size_t maxGroups = 10;
regmatch_t groupArray[maxGroups];
regcomp(®, regex, REG_EXTENDED);
if (regexec(®, str, maxGroups, groupArray, 0) == 0) {
unsigned int g = 0;
for (g = 0; g < maxGroups; g++) {
if (groupArray[g].rm_so == (size_t) -1)
break; // No more groups
char sourceCopy[strlen(str) + 1];
strcpy(sourceCopy, str);
sourceCopy[groupArray[g].rm_eo] = 0;
LOGDEBUG("Group %u: [%2u-%2u]: %s\n", g, groupArray[g].rm_so,
groupArray[g].rm_eo, sourceCopy + groupArray[g].rm_so);
}
返回匹配的组。