用于更改String的正则表达式

时间:2015-03-05 10:13:16

标签: regex

我希望将String与正则表达式匹配,以便捕获一些字符组。 String具有以下格式:

Some Error occured. Exception on row 0: execution of BeforeDelete cannot delete object  // I want to capture this part

(Namespace)  // This
             // Part
: []         // is optional
             // and redundant
(Namespace)  // for me

Class.Namespace.ClassName.MethodName: line 18, column 1  // This
Class.Namespace.ClassName.MethodName: line 24, column 1  // part
Class.Namespace.ClassName.MethodName: line 7, column 1   // i want 
Trigger.Namespace.TriggerName: line 4, column 1          // to capture

Debug Log:                                              // This part
32.0                                                    // is also
12:17:50.037 (37913230)|EXECUTION_STARTED               // optional
12:17:50.037 (37955457)|CODE_UNIT_STARTED|[EXTERNAL]    // and
12:17:50.038 (38147219)|VF_DESERIALIZE_VIEWSTATE_BEGIN  // redundant

它由2个强制性组和2个可选组组成

  1. 强制性:包含我要捕获的空格的字符组

  2. 可选:包含空白和多行的其他字符我不想捕获

  3. 强制性:我想要捕获具有空格和可能的多线的字符。始终以'Class'开始。或'触发。'

  4. 可选:其他字符包括我想要捕获的空白和多行,始终使用'Debug Log:'

  5. 启动

    我正在使用此正则表达式:

    (.+)(?:[\s\S]*)(Class\.[\s\S]+|Trigger\.[\s\S]+)[\s]*
    

    正则表达式应该考虑到除了此示例之外的其他目标字符串上可能缺少第2组和第4组。请记住,可选组的内容可能会有所不同。

    有没有人知道如何改善这个?

    谢谢

1 个答案:

答案 0 :(得分:0)

这个表达式:

^(.+?)\(.+?((?:Class\.|Trigger\.).+(?=(?:Class\.|Trigger\.|Debug)))+

以及RegexOptions.Singleline.字符匹配换行符)根据您的示例数据保证以下两个捕获组:

1:

  

发生了一些错误。第0行的异常:执行BeforeDelete无法删除对象

2:

  

Class.Namespace.ClassName.MethodName:第18行,第1列   Class.Namespace.ClassName.MethodName:第24行,第1列   Class.Namespace.ClassName.MethodName:第7行,第1列   Trigger.Namespace.TriggerName:第4行,第1列

这是你正在寻找的吗?


编辑:如果第一次捕获严格地在第一行,您可以在换行符上锚定:

^(.+?)\r\n.+?((?:Class\.|Trigger\.).+(?=(?:Class\.|Trigger\.|Debug)))+