我在c#开发了一个正则表达式,它检查日志文件中的特定模式。
字符串看起来像这样:
05-20-2013 15:57:09.334715 [del1-dhp-26330] Read 100 entries from syslog file test
我的正则表达式函数是
\d\d-\d\d-\d\d\d\d \d\d:\d\d:\d\d.\d\d\d\d\d\d [@"+agentName+"]"+" Read 100 entries from "+flatFileLogSourceName;
其中agent name和flatfilelogsource name将检索字符串中的相应值。
但是收到错误说[x-y]
范围的顺序相反..这应该是代理名称,因为它包含连字符。
所以我基本上在寻找一种方法,它可以像@
那样对\
答案 0 :(得分:2)
对于您重新提到的错误消息,我认为"[@"+agentName+"]"
应该像大多数正则表达式一样写成"\[@"+agentName+"\]"
,尽管我不知道C#的实现。
快速解释
方括号形成一个类,一种有效字符的集合以供匹配。这些类可以使用范围[0-9]
来匹配十进制表示法中的数字,或[0-7]
以八进制表示法匹配它们。并匹配匹配a,b,c,d或e的[a-e]
等一系列字符。但范围不能以相反的顺序排列。因此[a-z]
是有效范围,但[z-a]
不是。要避免创建字符类,必须使用反斜杠
答案 1 :(得分:1)
\是正则表达式转义字符。
这应该有效:
"\d{2}\-\d{2}\-\d{4} \d{2}:\d{2}:\d{2}\.\d{6} \["+agentName+"\] Read 100 entries from "+flatFileLogSourceName
编辑:虽然看到这句话让我对你实际要求的内容感到困惑:
代理名称和flatfilelogsource名称将检索我 字符串中的相应值。
如果您尝试从正则表达式匹配中提取数据,这可以帮助您:http://www.regular-expressions.info/named.html