使用wxRegEx时的一个问题 Topic is solved

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
winner4love
In need of some credit
In need of some credit
Posts: 5
Joined: Mon Dec 23, 2013 5:01 am

使用wxRegEx时的一个问题

Post by winner4love »

我定义了一个wxRegEx实例,希望能从文件路径中取出文件名字,编译时没有问题,但运行时总是弹出错误提示窗口,这是什么原因?
wxString path=wxT("c:\a.txt")
if( getfilename.Compile( wxT("(?<=\.*)[^\\]*\$") ) && getfilename.Matches(path) )
wxString filename=getfilename.GetMatch(path)

提示窗口内容为:
Invalid regular expression '(?<=.*)[^\]*$' : quantifier operand invalid
kipade
Earned some good credits
Earned some good credits
Posts: 126
Joined: Fri Nov 11, 2011 2:45 am
Location: China

Re: 使用wxRegEx时的一个问题

Post by kipade »

我确实看不明白你这个正则表达式为什么是这么写的。显然我也并不擅长正则表达式,对于你这个整法,我也能写出来一个符合你的要求的正则表达式来,供你参考:

Code: Select all

 wxString path=wxT("c:\\a\\bb\\cc.txt");
    wxString filename;
    wxRegEx getfilename;
    if( getfilename.Compile( wxT("([a-zA-Z]:.*\\\\)(.*)\\..*") ) )
    {
      if(getfilename.Matches(path) ){
        filename=getfilename.GetMatch(path,2);
        wxMessageBox(filename);
      }
    }
这段代码我是试验通过了才给你贴上。我的正则表达式实际上是:([a-zA-Z]:.*\\)(.*)\..*
在例子里面我的路径实际上是c:\a\bb\cc.txt
按照正则表达式的贪婪规则,第一个括号将以一个字母和:开始,直到最后一个\
第二个括号将匹配最后一个\后面的字符直到最后一个.,所以这个文件名就算里面有.也没关系
第一个()里面匹配的是c:\a\bb\,第二个括号匹配的是cc
Slackware GNU/Linux x86_64
wxWidgets-3.3.0
Post Reply