using System;
using System.Text.RegularExpressions;
using System.IO;
using System.Linq;
public class Test
{
public static readonly Regex rxQuoted = new Regex(@"""([^""\\]*(?:\\.[^\\""]*)*)""");
public static void Main()
{
// 1. Regex: \b(?:to\ background)\b, Match: N/A
checkIt("to background", "I need to find a string in this sentence!");
// 2. Regex: \b(?:to|background)\b, Match: to
checkIt("\"to\" \"background\"", "I need to find a string in this sentence!");
// 3. Regex: \b(?:to\ find)\b, Match: to find
checkIt("\"to find\"", "I need to find a string in this sentence!");
}
public static void checkIt(string searchString, string sentence)
{
var lst = rxQuoted.Matches(searchString)
.Cast<Match>()
.Select(p => Regex.Escape(p.Groups[1].Value))
.ToList();
var pattern = lst.Count > 0 ?
@"\b(?:" + String.Join("|", lst) + @")\b" :
@"\b(?:" + Regex.Escape(searchString) + @")\b";
Console.WriteLine("Regex: " + pattern);
Match match = Regex.Match(sentence, pattern);
if (match.Success)
{
Console.WriteLine("Match value: " + match.Value);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CnVzaW5nIFN5c3RlbS5JTzsKdXNpbmcgU3lzdGVtLkxpbnE7CnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUmVnZXggcnhRdW90ZWQgPSBuZXcgUmVnZXgoQCIiIihbXiIiXFxdKig/OlxcLlteXFwiIl0qKSopIiIiKTsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQkvLyAxLiBSZWdleDogXGIoPzp0b1wgYmFja2dyb3VuZClcYiwgTWF0Y2g6IE4vQQoJCWNoZWNrSXQoInRvIGJhY2tncm91bmQiLCAiSSBuZWVkIHRvIGZpbmQgYSBzdHJpbmcgaW4gdGhpcyBzZW50ZW5jZSEiKTsKCQkvLyAyLiBSZWdleDogXGIoPzp0b3xiYWNrZ3JvdW5kKVxiLCBNYXRjaDogdG8KCQljaGVja0l0KCJcInRvXCIgXCJiYWNrZ3JvdW5kXCIiLCAiSSBuZWVkIHRvIGZpbmQgYSBzdHJpbmcgaW4gdGhpcyBzZW50ZW5jZSEiKTsKCQkvLyAzLiBSZWdleDogXGIoPzp0b1wgZmluZClcYiwgTWF0Y2g6IHRvIGZpbmQKCQljaGVja0l0KCJcInRvIGZpbmRcIiIsICJJIG5lZWQgdG8gZmluZCBhIHN0cmluZyBpbiB0aGlzIHNlbnRlbmNlISIpOwoJfQoJcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrSXQoc3RyaW5nIHNlYXJjaFN0cmluZywgc3RyaW5nIHNlbnRlbmNlKQoJewoJCXZhciBsc3QgPSByeFF1b3RlZC5NYXRjaGVzKHNlYXJjaFN0cmluZykKCQkJCS5DYXN0PE1hdGNoPigpCgkJCQkuU2VsZWN0KHAgPT4gUmVnZXguRXNjYXBlKHAuR3JvdXBzWzFdLlZhbHVlKSkKCQkJCS5Ub0xpc3QoKTsgCgkgICAgdmFyIHBhdHRlcm4gPSBsc3QuQ291bnQgPiAwID8gCgkJCQlAIlxiKD86IiArIFN0cmluZy5Kb2luKCJ8IiwgbHN0KSArIEAiKVxiIiA6CgkJCQlAIlxiKD86IiArIFJlZ2V4LkVzY2FwZShzZWFyY2hTdHJpbmcpICsgQCIpXGIiOwoJICAgIENvbnNvbGUuV3JpdGVMaW5lKCJSZWdleDogIiArIHBhdHRlcm4pOwoKCQlNYXRjaCBtYXRjaCA9IFJlZ2V4Lk1hdGNoKHNlbnRlbmNlLCBwYXR0ZXJuKTsKCQlpZiAobWF0Y2guU3VjY2VzcykKCQl7CiAgICAJCUNvbnNvbGUuV3JpdGVMaW5lKCJNYXRjaCB2YWx1ZTogIiArIG1hdGNoLlZhbHVlKTsKCQl9Cgl9Cn0=