Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

linux版本完全没法正则搜索,当然也不能够正则替换啊 #288

Closed
harvey-git opened this issue Jun 28, 2019 · 23 comments
Closed
Assignees
Labels
Milestone

Comments

@harvey-git
Copy link

harvey-git commented Jun 28, 2019

Madedit-Mod version (or branch):
0.4.16
platform/architecture:
Ubuntu.18.04/x86_x64
compiler and compiler version:
GCC 7.3.0 build 09:07:40 Apr 8 2019
please describe what symptom you see, what you would expect to see instead and how to reproduce it.
madedit-regexif

我尝试了自行从源代码编译,然而,./configure 提示glib2.0需要大约2.6版本,然而ubuntu18.04自带的glib2.0是2.56,于是我转而尝试去自行编译glib2.0 2.6,结果缺乏更多的依赖包,这么跌跌撞撞得一周过去了……我终于放弃了,还是向几位大佬求助可能更有效率。
补充一下,因为工作原因,我的主环境切换到了Linux操作系统,在赢下我比较了大量的编辑器,最后发觉也就madedit和EmEditor最符合我的使用习惯,然而当编写大量文字时,EmEditor中的大纲插件能帮我省下不少时间,这使得EmEditor中最终在win下成为了我的主编辑器(madedit在编写修改超大文本时仍旧比EmEditor中更有优势),其他情况下我会用madedit。
我对madedit最干兴趣的地方其实是宏。我以前自行编写了大量emeditor下的宏脚本,如今主要环境转到ubuntu下后,我发觉也就只有madedit最符合我的使用习惯了,如果madedit解决了正则搜索替换再带上个大纲功能,对我来说就完美了!

@LiMinggang
Copy link
Owner

等我确认。理论上应该跟平台无关,MadEdit的正则是用boost实现的,而且是不需要编译的boost库

@LiMinggang
Copy link
Owner

确认,等下个版本修复。

@LiMinggang LiMinggang self-assigned this Jun 29, 2019
@LiMinggang LiMinggang added the bug label Jun 29, 2019
@harvey-git
Copy link
Author

感谢大佬。

@LiMinggang
Copy link
Owner

这个bug仅限于不区分大小写,你先选上区分大小写先使用着

@harvey-git
Copy link
Author

果然勾上不区分大小写可以用了,这个bug有点意思啊,哈哈哈。

@harvey-git
Copy link
Author

又发现一个bug,如果保存的madpython脚本跟要操作的文件使用不同编码(比如脚本为utf-8,操作文件为gb18030),则如果脚本里有查找替换操作,脚本运作后最终出来的文件就会乱码。

@LiMinggang
Copy link
Owner

LiMinggang commented Jun 29, 2019

后面这个问题没法重现,你需要给我例子,最好具体的文件+madpython脚本,还有步骤。我试着把脚本编码改成UTF8去替换编码为GB18030的文件中的中文字符,没有任何问题。

@LiMinggang
Copy link
Owner

LiMinggang commented Jul 2, 2019

\1和\2看着是对的啊,linux上显示的是内码图片。你需要把那俩'\'去掉。以下是去掉后的结果
测试还是测试测试还是测试测试还是测试测试还是测试测试还是测试测试还是测试测试还是测试测试还是测试测试还是
测试

【1、2】

测试还是测

【1、2】

测试还

【1、2】

测试还是测试v测试还是测试测试还是测试测试还是测试测试还是测试测试还是测试
vv什么弥勒佛 浪费了感冒了v'mrdf;l
测试还是测试测试还是测试测试还是测试测试还是测试
rjoj 测试还是测试测试还是测试测试还是测试测试还是测试

@harvey-git
Copy link
Author

harvey-git commented Jul 2, 2019

我又测试了,发现在mpy里面有正则替换中文必出现乱码,比如下面这样的代码:
medit.ReplaceTextAll("([^。… “”])(\s*\n)", "\1", True, True, False, False, -1)
我的本意是将被限制了指定字符长度后就换行的中文合并成正常的连续段落,然而,上面的正则内容在查找替换对话框运行是正常的,在mpy里替换的出来就必定成了乱码。
诡异的是如果mpy的内容只是普通替换不牵涉正则搜索替换就没有问题。
对了我还发现在madedit里面“\s”居然能匹配到“\n”。

@harvey-git
Copy link
Author

继续汇报bug,刚刚发现当我在一个utf8编码的文件里复制内容放到搜索对话框的搜索栏里,然后切换到一个不同编码(比如gb18030)的的文件标签时,搜索栏在得到焦点时搜索框里的文字乱码了!反之亦然。换句话说,搜索框里的内容编码不随当前文档切换自动更新而是保留原始复制时的编码。

@LiMinggang
Copy link
Owner

看来你对正则表达式理解的不太正确,这玩意每种实现都有差异,你要是用MadEdit的,需要研究这个:Boost.Xpressive
https://www.boost.org/doc/libs/master/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.installing_xpressive

\s那个应该是实现差异,不是bug

@LiMinggang
Copy link
Owner

搜索栏我是做过改进,就是根据当前文件内码来显示

@harvey-git
Copy link
Author

不好意思,我上面的表述有误,我的mpy核心内容是这一句:
medit.ReplaceTextAll("(第[^章]{1,3}章)(.+)", "\n## 【\1、\2】", True, True, False, False, -1)
将类似 “第一章大大大”这样的内容替换为“## 【第一章、大大大】”而不是想把它们替换成“【1、2】”这样。

@LiMinggang
Copy link
Owner

你应该用$1、$2,这个语法是The ECMA-262 Format Sequences,然后你参考boost的讲解

@LiMinggang LiMinggang added this to the 0.4.17 milestone Jul 4, 2019
@harvey-git
Copy link
Author

你应该用$ 1,$ 2,这个语法是ECMA-262格式序列,然后你参考boost的讲解
谢谢,有效了,请问哪里有mpy的详细api文档?比如
medit.ReplaceTextAll("(第[^章]{1,3}章)(.+)", "\n## 【\1、\2】", True, True, False, False, -1)
这段里True, True, False, False, -1)这几句分别代表啥意思?(我通过测试知道第一个true是值开启正则,第二个是指大小写敏感……最后的-1指全文搜索),我的本意是需要在mpy里执行搜索选取,然后在选区里进行搜索替换的操作。所以我希望能查阅到更详细的medit.xxxxxxx这类的函数的列表。
此外一个很尴尬的地方在于,我没法在搜索框里搜索替换“"”加上“\”也不行,能再麻烦下大佬么?

@LiMinggang
Copy link
Owner

LiMinggang commented Jul 4, 2019

函数列表在 help/MadPython.txt里面,如果安装后没有,那就在代码的help目录里看,没有太详细的说明。你可以用“先录制然后修改”这种办法

@LiMinggang
Copy link
Owner

“没法在搜索框里搜索替换“"”加上“\”也不行”
没太明白,你举个例子,给出原来的字符串,然后你想怎么替换

@LiMinggang
Copy link
Owner

LiMinggang commented Jul 4, 2019

哦,这个我经常做啊。你要是用正则替换,是需要加"\" ,如果是普通文本替换,是不需要的。
还是不明白你怎么捕获成对的“”?我正则还不如你熟练。

@LiMinggang
Copy link
Owner

我试试

@LiMinggang
Copy link
Owner

我这里执行正常(Windows 7)
"wojewo"
"我们"
变成了
“wojewo”
“我们”

@LiMinggang
Copy link
Owner

LiMinggang commented Jul 4, 2019

那你得等了,我好像在linux的虚拟机下没法输入中文,我一直没有装输入法。明天试试看

@LiMinggang
Copy link
Owner

你再开一个新的问题吧

@LiMinggang
Copy link
Owner

在ubuntu 18.04.2下测试正常,有没有我的修改都是正常替换

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants