VS10 中文件名的正则表达式格式有什么问题<regex>?
What's wrong in regex format for filenames in <regex> VS10?
我试图在Visual Studio 2010中解析文件名路径。但是程序崩溃了Microsoft C++ exception: std::tr1::regex_error at memory location 0x001ef120..
在regex myRegEx("^([a-zA-Z]\:)(\\[^\\/:*?<>"|]*(?<![ ]))*(\.[a-zA-Z]\{2,6\})$");
正则表达式为^([a-zA-Z]:)(\[^\/:*?<>"|]*(?<![ ]))*(.[a-zA-Z]{2,6})$
regex格式有什么问题?
您也许可以通过将其切成块来缩小范围。分别计算原子,看看错误出现在哪里:
"^([a-zA-Z]\:).*$"
"^([a-zA-Z]\:)(\\[^\\/:*?<>"|]*(?<![ ]))*[.]*$"
"^([a-zA-Z]\:)(\\[^\\/:*?<>"|]*(?<![ ]))*(\.[a-zA-Z]+)$"
"^([a-zA-Z]\:)(\\[^\\/:*?<>"|]*(?<![ ]))*(\.[a-zA-Z]\{2,6\})$"
一个可能的问题是范围,"{2,6}"。如果你真的想要"2到6个字母",那么你不希望在范围的中间有反斜杠。真正的答案取决于你的解析器。
另外,如果对用反斜杠转义的内容感到困惑,请记住,通常可以通过将特殊字符放入一个范围来转义它们。例如,\
可以等价于[]
, .
肯定等价于[.]
。
首先,我不太了解c++ regex语法,但是,在我看来,\[
意味着转义[
字符。
我猜你应该像[
一样编码,如果你想要一个否定的字符类[^\/:*?<>"|]
^([a-zA-Z]:)([^\/:*?<>"|]*(?<![ ]))*(.[a-zA-Z]{2,6})$
tr1::regex
不支持向后看,所以它阻塞了"(?<![ ])"
。
不幸的是,我不是一个足够的regex用户,不能给你指导你可以用什么代替
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 此模式的C++RegEx
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- C++ std::regex 使用前瞻失败
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 你能防止 std::regex 在无效表达式上抛出异常吗?
- 使用Regex解析cpp中的字符串并创建映射
- C++:如何用split查找单词?Regex
- 在VC2015U3上,std::regex比boost::regex慢得多
- 是否有更有效的方法来生成日期的REGEX字符串
- 如何显式调用运算符<<
- 在C++中使用带有regex的捕获组
- 将std::regex设置为静态的好主意吗
- 为什么Regex(c++)需要指数时间
- std::regex and dual ABI
- C++11 std::regex后备选项
- 以不同的方式替换每一项,regex c++