using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\s* # white spaces
########################## KEYS START ##########################
(?: # We\'ll use this to make keys optional
(?P<keys> # named group: keys
\d+ # match digits
| # or
""(?(?=\\\\"")..|[^""])*"" # match string between "", works even 4 escaped ones ""hello \"" world""
| # or
\'(?(?=\\\\\')..|[^\'])*\' # match string between \'\', same as above :p
| # or
\$\w+(?:\[(?:[^[\]]|(?R))*\])* # match variables $_POST, $var, $var[""foo""], $var[""foo""][""bar""], $foo[$bar[""fail""]]
) # close group: keys
########################## KEYS END ##########################
\s* # white spaces
=> # match =>
)? # make keys optional
\s* # white spaces
########################## VALUES START ##########################
(?P<values> # named group: values
\d+ # match digits
| # or
""(?(?=\\\\"")..|[^""])*"" # match string between "", works even 4 escaped ones ""hello \"" world""
| # or
\'(?(?=\\\\\')..|[^\'])*\' # match string between \'\', same as above :p
| # or
\$\w+(?:\[(?:[^[\]]|(?R))*\])* # match variables $_POST, $var, $var[""foo""], $var[""foo""][""bar""], $foo[$bar[""fail""]]
| # or
array\s*\((?:[^()]|(?R))*\) # match an array()
| # or
\[(?:[^[\]]|(?R))*\] # match an array, new PHP array syntax: [1, 3, 5] is the same as array(1,3,5)
| # or
(?:function\s+)?\w+\s* # match functions: helloWorld, function name
(?:\((?:[^()]|(?R))*\)) # match function parameters (wut), (), (array(1,2,4))
(?:(?:\s*use\s*\((?:[^()]|(?R))*\)\s*)? # match use(&$var), use($foo, $bar) (optionally)
\{(?:[^{}]|(?R))*\} # match { whatever}
)?;? # match ; (optionally)
) # close group: values
########################## VALUES END ##########################
\s* # white spaces";
string input = @"0 => ""a"", 123 => 123, 1234, 'got problem ?',
""a"" => $GlobalScopeVar,
$test_further => function test($noway){echo ""this works too !!!"";},
""yellow"" => ""blue"",
""b"" => array(""nested""=>array(1,2,3), ""nested""=>array(1,2,3),""nested""=>array(1,2,3)),
""c"" => function() use (&$VAR) { return isset($VAR) ? ""defined"" : ""undefined"" ; },
""bug"",$var = $_POST[""test];
""fixed"",
""mwahahahaa"" => ""Yeaaaah"",
$_POST[""hello""][\'world\'] => array(""is"", ""actually"", ""An array !"")";
RegexOptions options = RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Multiline;
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