爱折腾的Albert 2022-10-12 18:46 采纳率: 0%
浏览 35

请求报文通过的正则表达提取信息,史上最难正则表达式

问题遇到的现象和发生背景

请求报文通过正则表达式提取信息

用代码块功能插入代码,请勿粘贴截图

请求报文:

POST /install/index.php?step=3&testdbpwd=1

Host: chidaoshop.top

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49

Connection: keep-alive

Content-Length: 95

Accept: application/json, text/javascript, */*; q=0.01

X-Requested-With: XMLHttpRequest

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Origin: http://www.chidaoshop.top

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Referer: chidaoshop.top

Cookie: s0370d8c2=7usiqtl9mkm44kc7k5k85ga6j2;

dbHost=localhost&dbUser=hpq310bd65.bt&dbPwd=fp02m9&dbName=hpq310bd65.bt@localhost&dbport=3306

正则表达表达式规则:

  1. 请求的url /最后一串
  2. 请求的参数的key
运行结果及报错内容

解析结果:
index.phpsteptestdbpwddbHostdbUserdbPwddbNamedbport

  • 写回答

1条回答 默认 最新

  • 饭堂家老 2022-10-13 18:15
    关注

    既然是前端配合JS就非常简单了,当然一句正则也是可以完成的,考虑到JS的正则不支持递归写成一句太过复杂,就拆成两句正则

    var 欲查找文本  = "POST /install/index.php?step=3&testdbpwd=1\n\n \n\nHost: chidaoshop.top\n\n \n\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49\n\n \n\nConnection: keep-alive\n\n \n\nContent-Length: 95\n\n \n\nAccept: application/json, text/javascript, */*; q=0.01\n\n \n\nX-Requested-With: XMLHttpRequest\n\n \n\nContent-Type: application/x-www-form-urlencoded; charset=UTF-8\n\n \n\nOrigin: http://www.chidaoshop.top\n\n \n\nAccept-Encoding: gzip, deflate\n\n \n\nAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\n\n \n\nReferer: chidaoshop.top\n\n \n\nCookie: s0370d8c2=7usiqtl9mkm44kc7k5k85ga6j2;\n\n \n\ndbHost=localhost&dbUser=hpq310bd65.bt&dbPwd=fp02m9&dbName=hpq310bd65.bt@localhost&dbport=3306\n\n \n\n";
    var 全文匹配规则 = /^.+\/(.+)\?([^\n]+)[\s\S]+\nCookie:.+[\s]+([^\n]+)/;
    var 键匹配规则 = /[^&]+?(?==)/g;
    var 结果集 = 欲查找文本.match(全文匹配规则);
    var 最后一串 = 结果集[1];
    var 参数键名集1 = 结果集[2].match(键匹配规则).toString().replace(/,/g,"");
    var 参数键名集2 = 结果集[3].match(键匹配规则).toString().replace(/,/g,"");
    var 运行结果 = 最后一串 + 参数键名集1 + 参数键名集2;
    console.log(运行结果);
    

    得出结果

    index.phpsteptestdbpwddbHostdbUserdbPwddbNamedbport
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 10月12日

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图