将扩展正则表达式转换为.NET兼容的RegEx

时间:2009-08-28 22:15:20

标签: c# regex

我有一个适用于* NIX系统和支持扩展正则表达式(ERE)的语言的RegEx。我还没有找到支持ERE的免费.NET版库,也没有任何幸运的尝试将其转换为非ERE并获得相同的结果。这是RegEx:

^\+(<{7} \.|={7}$|>{7} \.)

背景:RegEx的目的是识别给定字符串是否显示来自未解析的subversion合并的标记。

2 个答案:

答案 0 :(得分:3)

与ERE语法一样,{p> It looks to me与.NET的正则表达式大多向上兼容,因为它与大多数其他“Perl兼容”版本一样(Perl,PHP,Python,JavaScript,Ruby,Java ...) 。换句话说,你可以在ERE正则表达式中做任何事情,你应该能够在相同的.NET正则表达式中做。当然是你的例子:

^\+(<{7} \.|={7}$|>{7} \.)

在.NET中与在ERE中的含义相同。我能看到的唯一一个主要例外是POSIX bracket expressions; .NET遵循Unicode标准。

当你去应用正则表达式时,事情真的会有所不同。在C#中你可以像这样应用那个正则表达式:

string result = Regex.Match(targetString, @"^\+(<{7} \.|={7}$|>{7} \.)").Value;

C#的逐字字符串保存你不得不像其他语言的字符串文字那样转义反斜杠;你只需要通过加倍引号来逃避引号:

@"He said, ""Look out!""";

这会回答你的问题吗?

答案 1 :(得分:0)

你确定你没有输入错字吗? RegexBuddy(当设置为POSIX ERE或GNU ERE时)表示“+”量词必须在可以重复的令牌之前。除此之外,这似乎是一个有效的.NET正则表达式。您可能还想查看一本关于正则表达式的伟大O'Reilly书籍。如果这没有帮助,请发布一些您想要匹配/不匹配的文本示例。