using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"<link(?=[^<>]*?opensearch)(?:[^h]+|h(?!ref))*+href=[""']?\K([^<>'""\s]+(?:\/(?!>)|\b))(?=[^<>]*>)";
string input = @"This should succeed:
<link rel=""search"" type=""application/opensearchdescription+xml"" href=""http://example.com/tsr-opensearch/"" title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=""http://www.example.com/search.xml"" title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=""/search.xml"" title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=""search.xml"" title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href="".search.xml"" title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=""./search.xml"" title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href="".search.xml"" title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href='http://www.example.com/search.xml' title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml title="" />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml>
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml/>
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/dsfdsf/search.xml />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml/ />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml/ />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://href.example.com/search.xml/ />
<link rel=""search"" type=""application/opensearchdescription+xml"" hre href=http://href.example.com/search.xml/ />
<link rel=""search"" type=""application/opensearchdescription+xml"" ref=""adfsf"" href=http://href.example.com/search.xml/ />
Should fail:
<link rel=""stylesheet"" type=""text/css"" href=""theme.css"">
<link rel=""search"" type=""application/opensearchdescription+xml"" href= http://www.example.com/search.xml />
<link rel=""search"" type=""application/opensearchdescription+xml"" href= http://www.example.com/search.xml>
link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml>
link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml />
<link rel=""search"" type=""application/opensearchdescription+xml"" href=http://www.example.com/search.xml";
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx