//(zone "[\s\w\d.\-]+" { type[\w\s]+;[\s]+file "[\w\d\/\-.]+";\s[\s]*serial-update[\-\w ]+;[\s]+allow-update { [\w ;]+};[\s]+allow-query { [\w ;]+};[\s]+allow-transfer { [\w ;]+};[\s]+) public static List <BindZoneModel> ParseComplexZones(string text) { var list = new List <BindZoneModel>(); var regex = new Regex("(zone \"[\\s\\w\\d.\\-]+\" { type[\\w\\s]+;[\\s]+file \"[\\w\\d\\/\\-.]+\";\\s[\\s]*serial-update[\\-\\w ]+;[\\s]+allow-update { [\\w ;]+};[\\s]+allow-query { [\\w ;]+};[\\s]+allow-transfer { [\\w ;]+};[\\s]+)"); var matches = regex.Matches(text); foreach (var match in matches) { var name = CaptureGroup(match.ToString(), "zone[\\s]+\"([\\s\\d\\w\\-.]+)\""); var type = CaptureGroup(match.ToString(), "type ([\\w]+)"); var filePath = CaptureGroup(match.ToString(), "file \"([\\w\\d\\/.]+)\""); var serialUpdateMethod = CaptureGroup(match.ToString(), "serial-update-method[\\s]+([\\w]+)"); var allowUpdate = CaptureGroup(match.ToString(), "allow-update[\\s]+{[\\s]+([\\w\\s]+);").Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim()).Where(_ => !string.IsNullOrWhiteSpace(_)).ToArray(); var allowQuery = CaptureGroup(match.ToString(), "allow-query[\\s]+{[\\s]+([\\w\\s]+);").Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim()).Where(_ => !string.IsNullOrWhiteSpace(_)).ToArray(); var allowTransfer = CaptureGroup(match.ToString(), "allow-transfer[\\s]+{[\\s]+([\\w\\s]+);").Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim()).Where(_ => !string.IsNullOrWhiteSpace(_)).ToArray(); var zone = new BindZoneModel { Name = name, Type = type, File = filePath, //SerialUpdateMethod = serialUpdateMethod, //AllowUpdate = allowUpdate, //AllowQuery = allowQuery, //AllowTransfer = allowTransfer }; list.Add(zone); } return(list); }
//(zone[\s]*"[\w\d\-.]+"[\s]*{[\s]*[\w ;"\/.]*};) public static List <BindZoneModel> ParseSimpleZones(string text) { var list = new List <BindZoneModel>(); var regex = new Regex("(zone[\\s]*\"[\\w\\d\\-.]+\"[\\s]*{[\\s]*[\\w ;\"\\/.]*};)"); var matches = regex.Matches(text); foreach (var match in matches) { var name = CaptureGroup(match.ToString(), "zone[\\s]+\"([\\s\\d\\w\\-.]+)\""); var type = CaptureGroup(match.ToString(), "type ([\\w]+)"); var filePath = CaptureGroup(match.ToString(), "file \"([\\w\\d\\/.]+)\""); var zone = new BindZoneModel { Name = name, Type = type, File = filePath, }; list.Add(zone); } return(list); }