我定义了一个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
使用wxRegEx时的一个问题 Topic is solved
Re: 使用wxRegEx时的一个问题
我确实看不明白你这个正则表达式为什么是这么写的。显然我也并不擅长正则表达式,对于你这个整法,我也能写出来一个符合你的要求的正则表达式来,供你参考:
这段代码我是试验通过了才给你贴上。我的正则表达式实际上是:([a-zA-Z]:.*\\)(.*)\..*
在例子里面我的路径实际上是c:\a\bb\cc.txt
按照正则表达式的贪婪规则,第一个括号将以一个字母和:开始,直到最后一个\
第二个括号将匹配最后一个\后面的字符直到最后一个.,所以这个文件名就算里面有.也没关系
第一个()里面匹配的是c:\a\bb\,第二个括号匹配的是cc
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);
}
}
在例子里面我的路径实际上是c:\a\bb\cc.txt
按照正则表达式的贪婪规则,第一个括号将以一个字母和:开始,直到最后一个\
第二个括号将匹配最后一个\后面的字符直到最后一个.,所以这个文件名就算里面有.也没关系
第一个()里面匹配的是c:\a\bb\,第二个括号匹配的是cc
Slackware GNU/Linux x86_64
wxWidgets-3.3.0
wxWidgets-3.3.0