gpt4 book ai didi

regex - 逗号分隔的前缀列表,里面有逗号

转载 作者:行者123 更新时间:2023-12-04 08:06:16 25 4
gpt4 key购买 nike

我正在尝试将逗号分隔的列表与也包含逗号的前缀值匹配。
我终于让它匹配了所有没有 , 的事件.
示例字符串(使用 NL 进行可视化 - 原始字符串没有 NL):

field01=Value 1,
field02=Value 2,
field03=<xml value>,
field04=127.0.0.1,
field05=User-Agent: curl/7.28.0\r\nHost: example.org\r\nAccept: */*,
field06=Location, Resource,
field07={Item 1},{Item 2}
我的实际 RegEx 看起来像这个未优化的部分....
(?'fields'(field[0-9]{2,3})=?([\s\w\d_<>.:="*?\-\/\\(){}<>'#]+))([^,](?&fields))*
任何人都知道如何解决这个问题?
编辑:
第一个模式接近我的预期结果。
这是字符串的匿名完整示例: asm01=Predictable Resource Location,Information Leakage,asm02=N/A,asm04=Uncategorized,asm08=2021-02-15 09:18:16,asm09=127.0.0.1,asm10=443,asm11=N/A,asm15=,asm16=DE,asm17=User-Agent: curl/7.29.0\r\nHost: dev.example.com\r\nAccept: */*\r\nX-Forwarded-For: 127.0.0.1\r\n\r\n,asm18=/Common/_www.example.com_live_v1,asm20=127.0.0.1,asm22=,asm27=HEAD,asm34=/Common/_www.example.com_live_v1,asm35=HTTPS,asm39=blocked,asm41=0,asm42=3,asm43=0,asm44=Error,asm46=200000028,200100015,asm47=Unix hidden (dot-file) access,.htaccess access,asm48={Unix/Linux Signatures},{Apache/NCSA HTTP Server Signatures},asm50=40622,asm52=200000028,asm53=Unix hidden (dot-file) access,asm54={Unix/Linux Signatures},asm55=,asm61=,asm62=,asm63=8985143867830069446,asm64=example-waf.example.com,asm65=/.htaccess,asm67=Attack signature detected,asm68=<?xml version='1.0' encoding='UTF-8'?><BAD_MSG><violation_masks><block>13020008202d8a-f803000000000000</block><alarm>417020008202f8a-f803000000000000</alarm><learn>13000008202f8a-f800000000000000</learn><staging>200000-0</staging></violation_masks><request-violations><violation><viol_index>42</viol_index><viol_name>VIOL_ATTACK_SIGNATURE</viol_name><context>request</context><sig_data><sig_id>200000028</sig_id><blocking_mask>7</blocking_mask><kw_data><buffer>Ly5odGFjY2Vzcw==</buffer><offset>0</offset><length>2</length></kw_data></sig_data><sig_data><sig_id>200000028</sig_id><blocking_mask>4</blocking_mask><kw_data><buffer>Ly5odGFjY2Vzcw==</buffer><offset>0</offset><length>3</length></kw_data></sig_data><sig_data><sig_id>200100015</sig_id><blocking_mask>7</blocking_mask><kw_data><buffer>Ly5odGFjY2Vzcw==</buffer><offset>1</offset><length>9</length></kw_data></sig_data></violation></request-violations></BAD_MSG>,asm69=5,asm71=/Common/_dev.example.com_SSL,asm75=127.0.0.1,asm100=,asm101=HEAD /.htaccess HTTP/1.1\r\nUser-Agent: curl/7.29.0\r\nHost: dev.example.com\r\nAccept: */*\r\nX-Forwarded-For: 127.0.0.1\r\n\r\n#015

最佳答案

该模式不适用于 fields group 匹配字符串 field您正在尝试重复命名组 fields但示例字符串没有字符串 field .
备注 那个[^,]匹配除逗号之外的任何字符,您可以省略命名组中的捕获组 field因为它已经是一个组和 \w也匹配 \d使用 2 个捕获组:

\b(asm[0-9]+)=(.*?)(?=,asm[0-9]+=|$)
  • \b一个字边界
  • (asm[0-9]+)捕获 第 1 组 , 匹配 asm 和 1+ 位数字
  • =字面匹配
  • (.*?)捕获 第 2 组 , 尽可能匹配任何字符
  • (?=正向前瞻,断言右边的是
  • ,asm[0-9]+=匹配 ,asm后跟 1+ 位数字和 =
  • |
  • $断言字符串的结尾

  • )关闭前瞻

  • Regex demo

    关于regex - 逗号分隔的前缀列表,里面有逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66206959/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com