写作绅士,读作丧尸 X岛揭示板
顺猴者昌 逆猴者亡 首页版规 |用户系统 |移动客户端下载 | 丧尸路标 | | 常用图串及路标 | 请关注 官方公众号:【X岛揭示板】 官方微博: 【@X岛极速版】| 人,是会思考的芦苇
常用串:·豆知识·跑团板聊天室·公告汇总串·X岛路标

No.53617916 - 无标题 - 技术宅


回应模式
No.53617916
名 称
E-mail
标题
颜文字
正文
附加图片
•程序语言、压制投稿、视频制作以及各计算机领域的技术问题
•我觉得还是CSDN靠谱一点
•本版发文间隔为15秒。

收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2022-11-20(日)22:13:28 ID:4WVuFwF [举报] [订阅] [只看PO] No.53617916 [回应] 管理
有无正则表达式厉害的肥哥,我想匹配一类复杂的算式
算式所有参与的数都是整数;支持括号;支持下列运算符+、-、*、/、%、^、D、d
比如:
-1%3d5-(-5*(4d8+2d3/(4+5D3))/(1D(1+2^2))d(4d7%3d5+14))^(1/1d2)

献上jp
Tips 无名氏 2099-01-01 00:00:01 ID:Tips超级公民 [举报] No.9999999 管理
(  ;´Д`  )说谁肥人呢
无标题 无名氏 2022-11-20(日)22:46:10 ID:nhsDT38 [举报] No.53618863 管理
你要匹配的算式在文件中一定单独占一行,还是可能嵌入在一行文本之中
无标题 无名氏 2022-11-20(日)22:51:11 ID:nhsDT38 [举报] No.53619021 管理
不管怎么说,你可以试试简单的
[0-9\+\-\*\/%^Dd()]
我不知道你的情景是什么,不知道会不会有错
无标题 无名氏 2022-11-20(日)22:57:10 ID:4WVuFwF (PO主) [举报] No.53619172 管理
>>No.53618863
一定独占一行
无标题 无名氏 2022-11-20(日)22:58:06 ID:4WVuFwF (PO主) [举报] No.53619192 管理
>>No.53618863
说错了,一定嵌入在其他文本内
无标题 无名氏 2022-11-20(日)23:03:44 ID:4WVuFwF (PO主) [举报] No.53619379 管理
>>No.53619021
我是想用这个切分字符串
我目前想了个这个出来([\+\-\*/\^%%Dd]?[(]*([\+\-\*/\^%%Dd]?[0-9]+)[)]*),但是有个问题就是比如匹配load1d3这种情况时,load的d也会一起被匹配
无标题 无名氏 2022-11-20(日)23:06:16 ID:nhsDT38 [举报] No.53619467 管理
>>No.53619379
切分的规则是什么( ゚∀。)
无标题 无名氏 2022-11-20(日)23:11:14 ID:4WVuFwF (PO主) [举报] No.53619637 管理
>>No.53619467
就比如aload1d3bload1-3d3……,我想分成aload、1d3、bload、1-3d3……
无标题 无名氏 2022-11-20(日)23:15:16 ID:4WVuFwF (PO主) [举报] No.53619780 管理
>>No.53619467
就是一串普通文本和一串我上面说的那种算式会交替排布,我要把文本和算式分开
无标题 无名氏 2022-11-20(日)23:17:40 ID:nhsDT38 [举报] No.53619863 管理
理解了,就是说在匹配算式的时候普通文本的 D 和 d 和一些公式中的符号也会被匹配
所以说正则表达式需要找的是同时出现几个给定元素的公式,而不是出现一个元素就可以
我想想……
无标题 无名氏 2022-11-20(日)23:30:44 ID:5Qug7GK [举报] No.53620283 管理
这些运算符都是二元的?那就在上面的表达式前面和后面分别加上[\d+]行不行
无标题 无名氏 2022-11-20(日)23:31:43 ID:nhsDT38 [举报] No.53620308 管理
我有一个想法,就是把一个公式分成三个部分,[开头][中间][结尾]
开头是 0-9 + - (
中间是 0-9 + - * / % ^ D d
结尾是 0-9 )
不知道可不可行
我还没写出来这个式子……主要是我被这个时灵时不灵的转义字符搞懵了……
无标题 无名氏 2022-11-20(日)23:38:49 ID:4WVuFwF (PO主) [举报] No.53620505 管理
>>No.53620308
这是我最现在想到的一个,似乎是可以用了^(?![\*/\^%%Dd])(?!.*[\+\-\*/\^%%Dd]$).*(([\+\-\*/\^%%Dd]?[(]*([\+\-\*/\^%%Dd]?[0-9]+)[)]*)+)
大概思路就是把[运算符][数字]看成一体,然后在外面括号后再看成一体,然后任意匹配这堆东西,最后排除不能当开头结尾运算符
然后的问题就是能拆分了,就是不能验证算式格式的正确性
无标题 无名氏 2022-11-20(日)23:40:07 ID:4WVuFwF (PO主) [举报] No.53620530 管理
>>No.53620283
都是二元的,但是+-号可能会出现单独出现在数字前面
无标题 无名氏 2022-11-20(日)23:41:37 ID:nhsDT38 [举报] No.53620584 管理
查找:([0-9+\-(]{1}[0-9+\-*/%^()Dd]+[0-9)])
替换: $1
替换中 $1 前后加空格
怎样
无标题 无名氏 2022-11-20(日)23:44:27 ID:4WVuFwF (PO主) [举报] No.53620679 管理
>>No.53620584
肥哥强啊
无标题 无名氏 2022-11-20(日)23:47:32 ID:4WVuFwF (PO主) [举报] No.53620775 管理
>>No.53620584
但是匹配不上-1这些
无标题 无名氏 2022-11-20(日)23:47:35 ID:nhsDT38 [举报] No.53620776 管理
>>No.53620505
原来还要验证算式格式的正确性(´゚Д゚`)你这要求怎么越来越复杂

如果你指的是歧义的话我倒能理解,就是说文件中可能把 1d100 写成 d100
但是错误的算式……是什么样子的?验证正确性指的是用两个正则表达式去分别匹配正确的式子和错误的式子吗?
无标题 无名氏 2022-11-20(日)23:48:32 ID:nhsDT38 [举报] No.53620803 管理
>>No.53620775
原来算式可以不带 d 的吗(´゚Д゚`)疏忽了,我再想想
无标题 无名氏 2022-11-20(日)23:52:20 ID:nhsDT38 [举报] No.53620914 管理
>>No.53620775
那就改成
([0-9+\-(]{1}[0-9+\-*/%^()Dd]*[0-9)]{1})

UP主: