V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nilai
V2EX  ›  PHP

求一个正则表达式

  •  
  •   nilai · 2016-11-24 13:22:00 +08:00 · 2493 次点击
    这是一个创建于 2925 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有如下文档:

    xxxx abcdefg();
    xxxasdfs a"."bc"."def"."g();"
    xxxasdfs abc"."def"."g();"
    xxxasdfs abcdef"."g();"
    xxxxxxx
    xxxxxxx

    类似这样,
    要匹配
    xxxasdfs a"."bc"."def"."g();"
    xxxasdfs abc"."def"."g();"
    xxxasdfs abcdef"."g();"

    这三行

    我写的这个正则这样可以匹配,
    'a[\s\"\.]*b[\s\"\.]*c[\s\"\.]*d[\s\"\.]*e[\s\"\.]*f[\s\"\.]*g[\s\"\.]*'


    但是会包含

    xxxx abcdefg();

    这一行, 怎么能把这一行给排除掉呢?
    16 条回复    2016-11-26 18:44:07 +08:00
    hxsf
        1
    hxsf  
       2016-11-24 13:40:20 +08:00 via iPhone
    不说原始需求。正则没法写。
    你这正则还能匹配一堆不在你例子里的东西呢
    avatar70t
        2
    avatar70t  
       2016-11-24 13:48:19 +08:00
    看你的字面意思就是要匹配一个点,那就
    .*\..*
    raysonx
        3
    raysonx  
       2016-11-24 13:49:29 +08:00
    (xxxasdfs a"\."bc"\."def"\."g\(\);")|(xxxasdfs abc"\."def"\."g\(\);")|(xxxasdfs abcdef"\."g\(\);" )
    raysonx
        4
    raysonx  
       2016-11-24 13:50:26 +08:00
    完全滿足題主描述的需求(逃)。
    nilai
        5
    nilai  
    OP
       2016-11-24 14:12:00 +08:00
    @raysonx 你赢了。。
    nilai
        6
    nilai  
    OP
       2016-11-24 14:15:22 +08:00
    @hxsf 我这需求就是检查 php 代码中利用拼接生成的函数 ,比如查找后门什么的,
    比如 eval() 函数 在 php 中就可以变形为
    $str = "e"."v"."a"."l";
    $str = "ev"."al";
    $str = "eva"."l";等等。
    但是我又不能直接查 eval 关键字, 误报太多。 只想查询这种通过字符串拼接的函数。 这就是需求,看有什么好的实现方式没?
    imn1
        7
    imn1  
       2016-11-24 14:23:48 +08:00
    其实没搞清你的需求
    那三行不都是 xxxasdfs 开头的么?
    ^xxxasdfs.+$
    不就行了?
    xycool
        8
    xycool  
       2016-11-24 14:26:19 +08:00
    DiamondbacK
        9
    DiamondbacK  
       2016-11-24 14:40:22 +08:00
    先匹配出所有引号对中的字符串,然后把它们拼接起来,最后通过该字符串的特征来进行过滤。
    champage
        10
    champage  
       2016-11-24 15:36:01 +08:00
    @raysonx 哈哈哈
    mytsing520
        11
    mytsing520  
       2016-11-24 16:44:47 +08:00
    先不说别的,楼主的头像……
    Orzzzz
        12
    Orzzzz  
       2016-11-24 18:08:26 +08:00
    upczww
        13
    upczww  
       2016-11-24 18:38:13 +08:00 via Android
    @raysonx 好暴力的正则
    mcfog
        14
    mcfog  
       2016-11-24 18:46:59 +08:00
    @nilai

    楼主你来匹配一下这个试试

    $func = implode(md5('z')[2], [chr(101) . base64_decode('dg=='), str_rot13('y')]); //eval
    larsenlouis
        15
    larsenlouis  
       2016-11-24 19:10:51 +08:00
    Sublime 测试通过

    xxxasdfs\s((a\")|(abc\")|(abcdef\")){1}(\.\"bc\"){0,1}(\.\"def\"){0,1}\.\"g\(\);\"
    sagaxu
        16
    sagaxu  
       2016-11-26 18:44:07 +08:00
    正则没用的,他可以写"\x65\x76\x61\x6c",还可以用其它很多方式在运行时生成,目前唯一靠谱的手段,就是比对每个文件的 hash 值,只要不一致,管它有没有问题,一律视为被污染过。被挂过


    .-' _..`.
    / .'_.'.'
    | .' (.)`.
    ;' ,_ `.
    .--.__________.' ; `.;-'
    | ./ /
    | | /
    `..'`-._ _____, ..'
    / | | | |\ \
    / /| | | | \ \
    / / | | | | \ \
    /_/ |_| |_| \_\
    |__\ |__\ |__\ |__\
    的机器,必须离线格盘重装系统,方能清除彻底。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3388 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:44 · PVG 19:44 · LAX 03:44 · JFK 06:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.