1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | using System; using System.Text.RegularExpressions; public class Test { public static void Main(){ string[] tests = { // matching "2", "1 AND 2", "12 OR 234", "(1) AND (2)", "(((1)) AND (2))", "1 AND 2 AND 3", "1 AND (2 OR (3 AND 4))", "1 AND (2 OR 3) AND 4", " ( 1 AND ( 2 OR ( 3 AND 4 ) )", "((1 AND 7) OR 6) AND ((2 AND 5) OR (3 AND 4))", "(1)", "(((1)))", // should fail "1 2", "1(2)", "(1)(2)", "AND", "1 AND", "(1 AND 2", "1 AND 2)", "1 (AND) 2", "(1 AND 2))", "(1) AND 2)", "(1)() AND (2)", "((1 AND 7) OR 6) AND (2 AND 5) OR (3 AND 4))", "((1 AND 7) OR 6) AND ((2 AND 5 OR (3 AND 4))", "" }; string re = @"(?x)^ \s* (?: (?<open> \( ) \s* )* \d+ \s* (?: (?<-open> \) ) \s* )* (?: \s+(?:AND|OR)\s+ \s* (?: (?<open> \( ) \s* )* \d+ \s* (?: (?<-open> \) ) \s* )* )* (?(open)(?!)) \z"; foreach (string str in tests){ Match match = Regex.Match(str, re); if (match.Success) Console.WriteLine("matched: '{0}'", str); else Console.WriteLine("failed: '{0}'", str); } } } |
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpewoJCQoJCXN0cmluZ1tdIHRlc3RzID0gewoJCQkvLyBtYXRjaGluZwoJCQkiMiIsCgkJCSIxIEFORCAyIiwKCQkJIjEyIE9SIDIzNCIsCgkJCSIoMSkgQU5EICgyKSIsCgkJCSIoKCgxKSkgQU5EICgyKSkiLAoJCQkiMSBBTkQgMiBBTkQgMyIsCgkJCSIxIEFORCAoMiBPUiAoMyBBTkQgNCkpIiwKCQkJIjEgQU5EICgyIE9SIDMpIEFORCA0IiwKCQkJIiAoIDEgICAgQU5EICggMiBPUiAgKCAzIEFORCAgICA0ICkgICkiLAoJCQkiKCgxIEFORCA3KSBPUiA2KSBBTkQgKCgyIEFORCA1KSBPUiAoMyBBTkQgNCkpIiwKCQkJIigxKSIsCgkJCSIoKCgxKSkpIiwKCQkJCgkJCS8vIHNob3VsZCBmYWlsCgkJCSIxIDIiLAoJCQkiMSgyKSIsCgkJCSIoMSkoMikiLAoJCQkiQU5EIiwKCQkJIjEgQU5EIiwKCQkJIigxIEFORCAyIiwKCQkJIjEgQU5EIDIpIiwKCQkJIjEgKEFORCkgMiIsCgkJCSIoMSBBTkQgMikpIiwKCQkJIigxKSBBTkQgMikiLAoJCQkiKDEpKCkgQU5EICgyKSIsCgkJCSIoKDEgQU5EIDcpIE9SIDYpIEFORCAoMiBBTkQgNSkgT1IgKDMgQU5EIDQpKSIsCgkJCSIoKDEgQU5EIDcpIE9SIDYpIEFORCAoKDIgQU5EIDUgT1IgKDMgQU5EIDQpKSIsCgkJCSIiCgkJCX07CgkJCgkJc3RyaW5nIHJlID0gQCIoP3gpXgoJCQlccyogKD86ICg/PG9wZW4+IFwoICkgXHMqICkqCgkJCVxkKwoJCQlccyogKD86ICg/PC1vcGVuPiBcKSApIFxzKiApKgoJCQkoPzoKCQkJCVxzKyg/OkFORHxPUilccysKCQkJCVxzKiAoPzogKD88b3Blbj4gXCggKSBccyogKSoKCQkJCVxkKwoJCQkJXHMqICg/OiAoPzwtb3Blbj4gXCkgKSBccyogKSoKCQkJKSoKCQkJKD8ob3BlbikoPyEpKQoJCQlceiI7CgkJCgkJZm9yZWFjaCAoc3RyaW5nIHN0ciBpbiB0ZXN0cyl7CgkJCU1hdGNoIG1hdGNoID0gUmVnZXguTWF0Y2goc3RyLCByZSk7CgkJCWlmIChtYXRjaC5TdWNjZXNzKQoJCQkJQ29uc29sZS5Xcml0ZUxpbmUoIm1hdGNoZWQ6ICd7MH0nIiwgc3RyKTsKCQkJZWxzZQoJCQkJQ29uc29sZS5Xcml0ZUxpbmUoImZhaWxlZDogICd7MH0nIiwgc3RyKTsgCgkJfQoJfQp9
-
upload with new input
-
result: Success time: 0.08s memory: 37256 kB returned value: 0
matched: '2' matched: '1 AND 2' matched: '12 OR 234' matched: '(1) AND (2)' matched: '(((1)) AND (2))' matched: '1 AND 2 AND 3' matched: '1 AND (2 OR (3 AND 4))' matched: '1 AND (2 OR 3) AND 4' matched: ' ( 1 AND ( 2 OR ( 3 AND 4 ) )' matched: '((1 AND 7) OR 6) AND ((2 AND 5) OR (3 AND 4))' matched: '(1)' matched: '(((1)))' failed: '1 2' failed: '1(2)' failed: '(1)(2)' failed: 'AND' failed: '1 AND' failed: '(1 AND 2' failed: '1 AND 2)' failed: '1 (AND) 2' failed: '(1 AND 2))' failed: '(1) AND 2)' failed: '(1)() AND (2)' failed: '((1 AND 7) OR 6) AND (2 AND 5) OR (3 AND 4))' failed: '((1 AND 7) OR 6) AND ((2 AND 5 OR (3 AND 4))' failed: ''


