huangzhiyia
V2EX  ›  问与答

求一个数据库或者正则大佬帮忙解决一个字符匹配的问题.

By huangzhiyia at 2020 年 12 月 19 日 · 1691 次点击
  • Django 模型设计
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
    folder = models.CharField(max_length=768, default="/", verbose_name="目录")
    file_name = models.CharField(max_length=256, default=None, null=True, verbose_name="文件名")
    file_size = models.BigIntegerField(default=0, verbose_name="文件大小,Bytes")
  • 示例

'/a/c/d/e/f'

'/a/1.txt'

'/a/2.word'

要求:查出所有 /a/ 开头的字符串, 但后续字符串中不包含 / 以及之后的字符内容

  • 例如

传入参数 '/a/' ,将查询到

/a/1.txt

/a/2.word 数据.

最好是 SQL 语句,实在不行正则表达式也可以.

  • 说明

真的不擅长写复杂的正则表达式与 SQL 命令,如果自己查资料学,折腾的话可能要一两天,

对于经验丰富的开发者来说可能只需要 3-10 分钟.

所以如果您抽空(摸鱼)的间隙的回答能帮助到我,我将赠与您一杯奶茶钱(15 CNY)表示感谢

(支付宝账号私发我邮箱:本站用户名 @gmail.com)

第 1 条附言  ·  2020 年 12 月 19 日
第一个正则表达式
/a/.(?!/).+

改进(包含子目录名)的正则表达式

/a/[^\f\n\r\t\v\/]+
9 条回复
F281M6Dh8DXpD1g2
   1
F281M6Dh8DXpD1g2  
   2020 年 12 月 19 日 via iPhone   ❤️ 1
15 块钱是来侮辱人的么
还是你一天的时间就值十五块钱?
raaaaaar
   2
raaaaaar  
   2020 年 12 月 19 日 via Android
你不说钱大家可能看看顺手就写了,要说钱就这
huangzhiyia
   3
huangzhiyia  
OP
   2020 年 12 月 19 日
@liprais 回复旁边两个字:请尽量让自己的回复能够对别人有帮助.

如果您觉得这篇提问帖子侮辱您,您可以直接 block 我而不是制造噪音与纷争.
huangzhiyia
   4
huangzhiyia  
OP
   2020 年 12 月 19 日
@raaaaaar 也许我表达有误,但我是想表达对别人的帮助感恩,这帖子不是有偿解决问题,这是两码事.

再退一步讲:大佬可能抽空三分钟可能就解决了,换算时薪是 300 块一天 2400 块,试问论坛有多少人的薪水能到达这个地步?
huangzhiyia
   5
huangzhiyia  
OP
   2020 年 12 月 19 日
花了 10 分钟学习了下写出来了,正则是

/a/.(?!/).+

希望对后来者有帮助.
makdon
   6
makdon  
   2020 年 12 月 19 日
但是你这样写,每次查 DB 都要扫全表做正则匹配吧...数据量大一点性能应该很捉鸡
huangzhiyia
   7
huangzhiyia  
OP
   2020 年 12 月 19 日 via Android
@makdon 是啊,现在我重新设计模型了,增加一个指向自身的目录外键。
chitanda
   8
chitanda  
   2020 年 12 月 19 日 via iPhone
听我一句劝,这些东西,你现在觉得难不去学,以后一直这么难,大家都是这么克服过来的,没有人一上来就懂正则和数据库设计。现在有别人帮你写,以后呢?面试呢?
huangzhiyia
   9
huangzhiyia  
OP
   2020 年 12 月 19 日 via Android
@chitanda 谢谢你的建议,但是不是难不难的问题,而是解决问题的效率的问题,并且共享问题以及答案供后人参考。

我遇到的问题,自己解决了,别人遇到类似的问题,搜索引擎找不到问题也要自己解决。

共享知识与踩过的坑,给互联网多一份参考答案。

如果大家都是看源码默默解决,请教周围的人,stackoverflow 这类社区也没存在的必要,这社区的板块也没存在的必要,在新的领域谁不是新手一步一步走来,学习最好的方式就是提问。
© 2026 V2EX · 45ms · 3.9.8.5