C++ 元正则表达式:测试正则表达式是否只是字符串(没有正则表达式“通配符”)
我有一个(假定格式良好的)正则表达式R。我想测试正则表达式是否只是一个匹配项(所有字母、数字和转义表达式),或者是否可以与其他任何内容交换。此函数“HasWildCards”的工作原理如下:C++ 元正则表达式:测试正则表达式是否只是字符串(没有正则表达式“通配符”),c++,regex,boost-regex,C++,Regex,Boost Regex,我有一个(假定格式良好的)正则表达式R。我想测试正则表达式是否只是一个匹配项(所有字母、数字和转义表达式),或者是否可以与其他任何内容交换。此函数“HasWildCards”的工作原理如下: bool a = HasWildCards("asdf");//returns false bool b = HasWildCards("asdf*");//returns true bool c = HasWildCards("asdf[123]");//returns true bool d = Has
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
(^(([\[\^\$\.\|\?\*\+\(\{\}])))?(\\[QEdwsDWSbAZzB])?([^\\][\[\^\$\.\|\?\*\+\(\)\{\}])?
我正在使用boost::regex,如果这有帮助的话。我正在考虑检查正则表达式是否与以下内容匹配:
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
(^(([\[\^\$\.\|\?\*\+\(\{\}])))?(\\[QEdwsDWSbAZzB])?([^\\][\[\^\$\.\|\?\*\+\(\)\{\}])?
我已经在几个表达式上对此进行了测试(使用grepWin的RegexTest工具)
所以非转义正则表达式符号开始,非转义标志,非转义正则表达式sumbol在主体中。还有别的选择吗?我把事情搞砸了吗?有更好的方法吗?嗯,有一种快速的两步测试方法。 函数的第一行可以删除转义字符,而不是在一个正则表达式中测试转义字符和通配符,然后第二行将测试其余字符串的通配符类型表达式
.*((\[.+?\])|(\{[0-9]*,[0-9]*\})|(\*)|(\+)).*
将匹配包含任意*、+、{#、#}或[]表达式的字符串。在函数中,返回传递的字符串是否与此表达式匹配。
“[^\\\\][\\.\\\\\\\\\\\\\\\\\\]\\\\\?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\”
如果一个特殊字符存在,但之前没有转义,则可能需要扩展第二个字符类以包含我从头顶漏掉的其他特殊字符。所有反斜杠都会加倍,以便转义到字符串中。@DrewMcGowen在一些表达式上是的,每当我打破它时,我都必须编辑正则表达式…@MadScienceDreams您可能想在问题中提到这一点,以防有人认为您实际上没有测试过anything@Robadob是 啊如果它在行首没有转义(您的要求在符号前有一个非转义字符),并且没有检查其他转义符号bold(\Q\E,例如),则必须搜索它。这可能是一个错误吗?你需要这个做什么?