元正则表达式:测试正则表达式是否只是一个字符串(没有正则表达式"wildcards")

Meta Regex: test if regex is only a string (no regex "wildcards")

本文关键字:正则表达式 一个 字符串 wildcards 测试 是否      更新时间:2023-10-16

我有一个(假定格式良好)正则表达式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工具)

所以非转义regex符号开始,非转义标志,非转义regex-sumbol在正文中。有其他选择吗?我搞砸了什么吗?有更好的方法吗?

好吧,有一种快速的两步测试方法。函数的第一行可以删除转义字符,然后第二行将测试剩余字符串中的通配符类型表达式,而不是在一个正则表达式中测试转义字符通配符。

.*(([.+?])|({[0-9]*,[0-9]*})|(*)|(+)).*

将匹配包含任意*、+、{#、#}或[]表达式的字符串。在函数中,返回传递的字符串是否与此表达式匹配。