【问题标题】:Meta Regex: test if regex is only a string (no regex "wildcards")元正则表达式:测试正则表达式是否只是一个字符串(没有正则表达式“通配符”)
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 2012-06-02
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2015-10-21
    • 2023-03-30
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多