合理简单的正则表达式没有找到任何结果

时间:2012-06-19 09:22:32

标签: regex

我正在尝试构造一个提取结构名称的正则表达式,尽管我没有找到它的任何内容。我正在完成的步骤是:

  1. 查找字符串'public struct'。
  2. 查找所有字符A-Z a-z一次或多次并将它们分组。
  3. 然后查找换行符,carrige返回或任何其他字符一次或多次(我认为这将占开头花括号和任何空格的可能性)。
  4. 最后找一个}
  5. /

    public struct ABC{
        int a;
        int b;
    }
    
    public struct DEF {
        ulong d;
        string e;
    }
    
    Regex:
        public struct ([A-Za-z]+)[{|\r|\n|.]+}
    
    Should give:
        ABC
        DEF
    

    为什么正则表达式找不到任何东西?

2 个答案:

答案 0 :(得分:2)

因为正文包含的内容超过[{|\r|\n|.]+可以匹配的内容。

如果您只想要名字,可以使用:

public struct (\w+)\s*{

[{|\r|\n|.]+[{\r\n.|]+相同(括号是字符类,而不是组),您可能需要[^}]+

答案 1 :(得分:1)

要仅提取'ABC'部分,您需要在正则表达式中使用正面lookeahead。 一个简单的解决方案是:

(?<=(public struct ))[\w]+

因此,根据您给出的示例,它将仅提取:

  • ABC
  • DEF

编辑: 以下是与工作示例的链接:

http://gskinner.com/RegExr/?319vk