求一个正则表达式

2016-11-24 13:22:00 +08:00
 nilai
有如下文档:

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();

这一行, 怎么能把这一行给排除掉呢?
2503 次点击
所在节点    PHP
16 条回复
hxsf
2016-11-24 13:40:20 +08:00
不说原始需求。正则没法写。
你这正则还能匹配一堆不在你例子里的东西呢
avatar70t
2016-11-24 13:48:19 +08:00
看你的字面意思就是要匹配一个点,那就
.*\..*
raysonx
2016-11-24 13:49:29 +08:00
(xxxasdfs a"\."bc"\."def"\."g\(\);")|(xxxasdfs abc"\."def"\."g\(\);")|(xxxasdfs abcdef"\."g\(\);" )
raysonx
2016-11-24 13:50:26 +08:00
完全滿足題主描述的需求(逃)。
nilai
2016-11-24 14:12:00 +08:00
@raysonx 你赢了。。
nilai
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
2016-11-24 14:23:48 +08:00
其实没搞清你的需求
那三行不都是 xxxasdfs 开头的么?
^xxxasdfs.+$
不就行了?
xycool
2016-11-24 14:26:19 +08:00
DiamondbacK
2016-11-24 14:40:22 +08:00
先匹配出所有引号对中的字符串,然后把它们拼接起来,最后通过该字符串的特征来进行过滤。
champage
2016-11-24 15:36:01 +08:00
@raysonx 哈哈哈
mytsing520
2016-11-24 16:44:47 +08:00
先不说别的,楼主的头像……
Orzzzz
2016-11-24 18:08:26 +08:00
upczww
2016-11-24 18:38:13 +08:00
@raysonx 好暴力的正则
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
2016-11-24 19:10:51 +08:00
Sublime 测试通过

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


.-' _..`.
/ .'_.'.'
| .' (.)`.
;' ,_ `.
.--.__________.' ; `.;-'
| ./ /
| | /
`..'`-._ _____, ..'
/ | | | |\ \
/ /| | | | \ \
/ / | | | | \ \
/_/ |_| |_| \_\
|__\ |__\ |__\ |__\
的机器,必须离线格盘重装系统,方能清除彻底。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/322943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX