using System.Text.RegularExpressions;
public static void Main()
string input = "title:\"News\" AND (createdby:\"Leoul\" OR createdby:\"Upas\") AND someothermanagedprop:\"something\"";
string[] splitInputs = input.Split(new string[] { " AND " }, StringSplitOptions.None);
bool isValidInput = true;
foreach (string splitInput in splitInputs)
Console.WriteLine(splitInput);
bool isValidMatch = IsValidMatch(splitInput);
isValidInput &= isValidMatch;
Console.WriteLine("IsValidMatch: " + isValidMatch);
Console.WriteLine(isValidInput);
public static bool IsValidMatch(string splitInput)
string[] patterns = new string[]
"(createdby:\\\"(?<createdby>.*?)\\\"( OR )?)",
@"^title:""(?<title>(.*))""$"
foreach (string pattern in patterns)
if (IsValidMatchForPattern(pattern, splitInput))
public static bool IsValidMatchForPattern(string pattern, string splitInput)
Regex rgx = new Regex(pattern);
MatchCollection matches = rgx.Matches(splitInput);
foreach (Match match in matches)
Console.WriteLine(match.Groups[0]);
Console.WriteLine(match.Groups[1]);
Console.WriteLine("matched title: " + match.Groups["title"]);
Console.WriteLine("matched createdby: " + match.Groups["createdby"]);