请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 274|回复: 21

[已解决] string.find 查找带()的字符时出错,请问是怎么回事。

[复制链接]

8

主题

34

帖子

40

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-6 12:43:39 | 显示全部楼层 |阅读模式
本帖最后由 yu1025 于 2022-1-8 16:15 编辑

我在程序 中用了这个函数 。k1,k2=string.find(m1,m2)

目前在m1="C:\Users\Administrator\Desktop\音乐2\看透爱情看透你(dj版) - 冷漠.mp3"
          m2=“看透爱情看透你(dj版) - 冷漠”
的时候,会出现k1和k2都是null.
其它文件名不带()的都没问题。
请问是什么原因。
回复

使用道具 举报

0

主题

11

帖子

7

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-7 15:25:38 | 显示全部楼层
本帖最后由 空手套大师 于 2022-1-7 23:18 编辑

正确写法:

string.find("看透你(dj版)","你\(dj版\)")

错误写法:
string.find("看透你(dj版)","你(dj版)")

模式匹配入门教程
https://bbs.aardio.com/forum.php ... tid=172&from=portal
https://bbs.aardio.com/doc/refer ... ttern%20syntax.html
回复 支持 2 反对 0

使用道具 举报

0

主题

11

帖子

7

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-6 16:32:43 | 显示全部楼层
原因是你基础语法不看,函数说明也不看,写代码全靠蒙。
回复 支持 反对

使用道具 举报

5

主题

44

帖子

55

积分
交易币
0

编程一段

Rank: 2

发表于 2022-1-6 17:58:18 | 显示全部楼层
楼上说得对
网站: aardio学习笔记,www.htmlayout.cn
回复 支持 反对

使用道具 举报

1

主题

30

帖子

750

积分
交易币
0

超级版主

Rank: 8Rank: 8

发表于 2022-1-6 19:13:08 | 显示全部楼层
[aardio] 纯文本查看 复制代码
import console
m1="C:\Users\Administrator\Desktop\音乐2\看透爱情看透你(dj版) - 冷漠.mp3"
m2="看透爱情看透你(dj版) - 冷漠"

k1,k2=string.find(m1,"<@"+m2+"@>")
console.dump(k1,k2)
console.pause()
回复 支持 反对

使用道具 举报

8

主题

34

帖子

40

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2022-1-7 14:30:08 | 显示全部楼层
本帖最后由 yu1025 于 2022-1-7 14:32 编辑

感谢yours.能说一下原因吗?谢谢。
楼上二位说得对。是有点瞎蒙的意思 。不断的参考其它同志们的程序 段。也还好。解决了好几个工作中的问题。幸好有这么个平台,大家也都很乐意帮助。


回复 支持 反对

使用道具 举报

8

主题

34

帖子

40

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2022-1-7 15:30:21 | 显示全部楼层
本帖最后由 yu1025 于 2022-1-7 15:31 编辑
空手套大师 发表于 2022-1-7 15:25
别人告诉你答案,仍然不肯看文档。

不过甜言蜜语打心理战 —— 谁不喜欢呢?!忍不住就放下一个亿的生意 ...
看了一下文档,是不是下面说的问题。根本原因是汉字和(符号存在串码???


内码串码问题
使用查找替换函数时,如果查找单个汉字,该汉字在目标字符串中不存在,但是却能找到该汉字,这通常是由内码串码导致。

一个汉字由两个字节组成(英文字母是单字节),如果一个汉字的第二个字节与后面一个汉字的第一个字节刚好构成另外一个汉字的内码,这种现象我们称为“内码串码”。

例如:

io.open()
io.print( string.find("椒礁" ,"方") )
控制台显示找到“方”字,起始位置为2,结束位置为3,则好是椒的第二个字节,礁的第一个字节。
模式匹配是基于二进制模式的所以会截断双字节字符,导致串码现象,实现上一般只有在查找单个字符时出现串码的,查找三个字节以上的字符串时出现串码的概率就非常小可以忽略。

aardio的string.find函数、string.replace函数都提供了解决串码问题的方法,只要在查找字符串前加上@@前缀即可 - 这时候表示启用普通的文本查找替换,不会会截断双字节字符,
回复 支持 反对

使用道具 举报

0

主题

11

帖子

7

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-7 17:46:38 | 显示全部楼层
本帖最后由 空手套大师 于 2022-1-7 17:54 编辑
yu1025 发表于 2022-1-7 15:30
看了一下文档,是不是下面说的问题。根本原因是汉字和(符号存在串码???
这是从哪挖坟挖出 10 年前过时的老文档,
aardio 10 就已经是 Unicode 内核了,不会有串码问题。
就可以明白 () 是用来给匹配分组
string.find("(abc)","(abc)") 找到的是 "abc"
string.find("(abc)","\(abc\)") 找到的才是 "(abc)"
回复 支持 反对

使用道具 举报

0

主题

11

帖子

7

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-7 17:57:36 | 显示全部楼层
模式匹配快速入门
https://bbs.aardio.com/forum.php ... 172&from=portal
模式匹配是精简的正则表达式,语法简单。看一遍上面的教程,5 分钟内可以入门。

回复 支持 反对

使用道具 举报

0

主题

11

帖子

7

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-7 18:15:34 | 显示全部楼层
自带的文档不看跑去看非官方的文档,都 aardio v34 了,你还在看 aardio v8 的文档。
aardio 帮助文档第一页就写了: 本文档会保持活跃地更新。使用第三方单独分发、擅自改动的文档可能导致大家阅读到过时、误导性的内容 …… 自己要往坑里跳,真是九头牛都拉不住。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2022-1-19 06:43 , Processed in 0.073064 second(s), 26 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表