• 5702阅读
  • 6回复

QLibrary和QRegExp的两个问题,有点不明白 [复制链接]

上一主题 下一主题
离线stzhou
 

只看楼主 正序阅读 楼主  发表于: 2009-04-17
— 本帖被 xtfllbl 执行压帖操作(2010-08-31) —
首先是QLibrary的load函数,Win32环境下应用过程中存在这样的一个问题:
存在a.exe,b.dll和c.dll三个文件,其中a.exe在alib目录中,另外两个dll在与alib并列的blib目录中,并且b.dll静态依赖于c.dll,a.exe动态调用b.dll,
此时,调用a.exe,在其中用QLibrary的load函数添加模块b.dll,则模块导入不成功,调试过程中提示模块不存在,但把c.dll放到alib目录下则导入成功,为何会这样?(两个目录均不在path环境变量中)

另外,用QRegExp解析一个字符串,为什么这个正则表达式是非法的?
          QRegExp rx(QString("(?<=[Ss][Ee][Rr][Vv][Ee][Rr]=).*(?=;[Pp][Oo][Rr][Tt])") );
    bool b = rx.isValid();
    int pos = rx.indexIn(uri);
    if (pos > -1)
    {
        return rx.cap(1);
    }
    return QString();

此处的b值为false,但该正则表达式已经在一些测试工具中测试成功了,能正常使用,是不是我的QRegExp使用方法不对?
该表达式用于在类似于“server=192.168.1.210;port=5151;username=KJ;password=fgjhjg;”的字符串中解析出服务器地址,端口等参数
离线lf541512

只看该作者 6楼 发表于: 2010-08-31
建议楼主好好看看QT帮助文档里的QRegExp 类
离线wvins
只看该作者 5楼 发表于: 2009-04-17
你还真顽强。

当我什么都没说过
离线stzhou

只看该作者 4楼 发表于: 2009-04-17
引用第3楼wvins于2009-04-17 15:04发表的  :
问题是你用不好这个工具。
你觉得它里面出现=号你用正则表达式要怎么解析呢?里面出现=不只给普通的分析增加难度,给正则表达式增加难度更大。
如果你不知道出现等号怎么处理,我可以告诉你:
对于分号划分出的每一行,只有第一个等号具有赋值的意义,其它等号只作为字符串的组成部分。
.......

用不好就学,反正总要用的,关键是QRegExp是否完善的问题。我觉得给正则表达式增加难度,有点难以理解,它就应该支持我按语法给出的匹配问题,什么难度不难度的,既然已经实现的东西,符合规范的表达式都应该可以匹配,不应该有条件的限制,说表达式中不应该有=号,那不是太搞笑了吗?另外,是否区分大小写字母是否只是QRegExp中的功能,而不是标准正则表达式的规范?我写表达式喜欢先在工具中测试一下,测试工具中一般没有这个选项,所以不太习惯使用是否区分大小写。
离线wvins
只看该作者 3楼 发表于: 2009-04-17
问题是你用不好这个工具。

你觉得它里面出现=号你用正则表达式要怎么解析呢?里面出现=不只给普通的分析增加难度,给正则表达式增加难度更大。
如果你不知道出现等号怎么处理,我可以告诉你:
对于分号划分出的每一行,只有第一个等号具有赋值的意义,其它等号只作为字符串的组成部分。

-------
当然,我没有看不上正则表达式的意思,我个人非常喜欢正则表达式。
只是觉得你为了使用正则表达式而套用正则表达式没有意义。

另外,如果你只是想学学正则表达式的话:
提一点你正则表达式没写好的地方,正则表达式是有不区分大小写的设置,所以是不要通过
[Ss][Ee][Rr][Vv][Ee][Rr]这种方式来匹配Server的。
离线stzhou

只看该作者 2楼 发表于: 2009-04-17
引用第1楼wvins于2009-04-17 10:34发表的  :
喜欢正则表达式是好事,不过你举得例子不需要正则表达式。
正则表达式用在大文本数据的规则分析,这种一两行的文本直接分析就行了
通过';'区分行
通过'='区分Key和Value

不能这样讲,如果是加密的,value中可能会有=或;怎么办?况且有工具不用,非得自己开发,那还不死人啊
离线wvins
只看该作者 1楼 发表于: 2009-04-17
喜欢正则表达式是好事,不过你举得例子不需要正则表达式。
正则表达式用在大文本数据的规则分析,这种一两行的文本直接分析就行了
通过';'区分行
通过'='区分Key和Value