using System.Text.RegularExpressions;
public static void Main()
Console.WriteLine("Hello World");
var input = "Apple (Orange & Chai) Ten";
var result1 = GenRegexp(ref input);
Console.WriteLine("Gen Regexp = " + result1);
public static string GenRegexp(ref string keyword) {
if (string.IsNullOrEmpty(keyword)) { return ""; }
while (keyword.Length > 0) {
var k = keyword.Substring(0, 1);
keyword = keyword.Substring(1);
word += GenRegexp(ref keyword);
keyword = keyword.Substring(1);
Console.WriteLine("Word = " + word);
regexp = ProcessRegexp(word);
Console.WriteLine("Regexp = " + regexp);
keyword = keyword.Substring(1);
return "^(" + ProcessRegexp(word) + ").*$";
public static string ProcessRegexp(string word) {
if (string.IsNullOrEmpty(word)) { return ""; }
var and = word.IndexOf('&');
var words = word.Split('&');
foreach (var w in words) {
Console.WriteLine("Wordy = " + w);
var r = ProcessRegexp(w.Trim());
if (r.Trim().StartsWith("(?=", StringComparison.Ordinal)) {
regexp += "(?=.*" + r.Trim() + ")";
var or = word.IndexOf('^');
var words = word.Split('^');
foreach (var w in words) {
Console.WriteLine("Words = " + w);
var r = ProcessRegexp(w.Trim());
if (r.Trim().StartsWith("(?=", StringComparison.Ordinal)) {
regexp += r.Trim() + "|";
regexp += "(?=.*" + r.Trim() + ")|";
regexp = regexp.TrimEnd('|');
var matches = Regex.Matches(word.Trim(), "\"[^\"]*\"");
foreach (Match ma in matches) {
Console.WriteLine("Match = " + ma.Value);
var reg = ma.Value.Substring(1, ma.Length - 2);
regexp += "(?=.*(" + reg + "))|";
var wo = Regex.Replace(word.Trim(), "\"[^\"]*\"", "");
regexp += ProcessRegexp(wo.Trim());
return regexp.TrimEnd('|');
var sp = word.Trim().IndexOf(' ');
var words = word.Trim().Split(' ');
foreach (var w in words) {
Console.WriteLine("Worder = " + w);
var r = ProcessRegexp(w.Trim());
if (r.Trim().StartsWith("(?=", StringComparison.Ordinal)) {
regexp += r.Trim() + "|";
regexp += "(?=.*" + r.Trim() + ")" + "|";
regexp = regexp.TrimEnd('|');
if (word.Trim().StartsWith("(?=", StringComparison.Ordinal)) {
return "(?=.*" + word.Trim() + ")";