【发布时间】:2013-08-01 11:46:13
【问题描述】:
我有一个(假定格式正确)正则表达式 R。我想测试正则表达式是否只是一个匹配项(所有字母、数字和转义表达式),或者可以与其他任何内容交换。这个函数“HasWildCards”的工作方式如下:
bool a = HasWildCards("asdf");//returns false
bool b = HasWildCards("asdf*");//returns true
bool c = HasWildCards("asdf[123]");//returns true
bool d = HasWildCards("asdf\\[123\\]");//returns false
我正在使用 boost::regex,如果这有帮助的话。我正在考虑检查正则表达式是否匹配这样的内容:
(^(([\[\^\$\.\|\?\*\+\(\{\}])))?(\\[QEdwsDWSbAZzB])?([^\\][\[\^\$\.\|\?\*\+\(\)\{\}])?
我已经在几个表达式上测试了这个(使用 grepWin 的 RegexTest 工具)
所以非转义正则表达式符号开始,非转义标志,非转义正则表达式 sumbol 在正文中。有替代方案吗?我搞砸了什么吗?有没有更好的办法?
【问题讨论】:
-
"[^\\\\][\\.\\^\\$\\[\\]\\?\\+\\*\\{\\}]"如果一个特殊字符存在而在它之前没有转义,您可能需要扩展第二个字符类以包含我想念的其他特殊字符。所有反斜杠都加倍以转义到字符串中。 -
@DrewMcGowen 在几个表达式上是的,每当我打破它时,我都必须编辑正则表达式......
-
@MadScienceDreams 你可能想在你的问题中提到这一点,以防有人认为你实际上没有测试任何东西
-
@Robadob 是的,如果它没有在行首转义(你的要求在符号之前有一个非转义字符)并且不检查其他转义符号,它必须搜索(例如\Q\E)
-
这可能是XY problem 吗?你需要这个做什么?
标签: c++ regex boost-regex