Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 元正则表达式:测试正则表达式是否只是字符串(没有正则表达式“通配符”)_C++_Regex_Boost Regex - Fatal编程技术网

C++ 元正则表达式:测试正则表达式是否只是字符串(没有正则表达式“通配符”)

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

我有一个(假定格式良好的)正则表达式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
(^(([\[\^\$\.\|\?\*\+\(\{\}])))?(\\[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,例如),则必须搜索它。这可能是一个错误吗?你需要这个做什么?