{"id":767,"date":"2011-03-04T17:25:31","date_gmt":"2011-03-04T16:25:31","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=767"},"modified":"2011-03-07T17:47:27","modified_gmt":"2011-03-07T16:47:27","slug":"bug-vc-2010-regex-liefert-falsche-ergebnisse-bei-verwendung-von-repetitionswiederholungen","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2011\/03\/04\/bug-vc-2010-regex-liefert-falsche-ergebnisse-bei-verwendung-von-repetitionswiederholungen\/","title":{"rendered":"BUG: VC-2010 regex liefert falsche Ergebnisse bei Verwendung von Repetitions\/Wiederholungen"},"content":{"rendered":"<p>In der <strong><em>regex <\/em><\/strong>Implementierung von VS-2010 ist ein relativ fataler Bug drin, der auftritt, wenn man Repetitions (Wiederholungen, {n}) verwendet.<br \/>\nWie zum Beispiel hier in diesem Beispiel.<\/p>\n<pre lang=\"cpp\">#include &lt;stdio.h&gt;\r\n#include &lt;ios&gt;\r\n#include &lt;iostream&gt;\r\n#include &lt;ostream&gt;\r\n#include &lt;regex&gt;\r\n#include &lt;string&gt;\r\nusing namespace std;\r\n\r\nvoid test(const string&amp; s, const string&amp; reg)\r\n{\r\n  cout &lt;&lt; \"---------------\" &lt;&lt; endl;\r\n  cout &lt;&lt; \"s: \" &lt;&lt; s &lt;&lt; endl;\r\n  cout &lt;&lt; \"r: \" &lt;&lt; reg &lt;&lt; endl;\r\n\r\n  const regex r(reg);\r\n  cout &lt;&lt; boolalpha &lt;&lt; regex_match(s, r) &lt;&lt; endl;\r\n}\r\n\r\nint main()\r\n{\r\n printf(\"%02d.%02d.%05d.%02d\\n\",\r\n          _MSC_VER \/ 100,\r\n          _MSC_VER % 100,\r\n          _MSC_FULL_VER % 100000,\r\n          _MSC_BUILD);\r\n\r\n  test(\"56.\" , \"(([0-9]{1,2})\\\\.){1}\");\r\n  test(\"1.\" ,  \"(([0-9]{1,2})\\\\.){1}\");\r\n  test(\"56.1.\", \"(([0-9]{1,2})\\\\.){2}\");\r\n\r\n}<\/pre>\n<p>Der erste\u00a0und zweite Ausdruck f\u00fchrt zu einem Match. Der dritte Ausdruck ist eigentlich nur der kombinierte Test, der beide Ausdr\u00fccke in einem testet.<br \/>\nDer Fehler wird auch in SP1 nicht gefixed sein.<\/p>\n<p>Meine Tests ergaben, dass in VS-2008 SP1 bei der das ganze tr1-Zeugs in VisualStudio Einzug genommen hat, noch alles korrekt funktioniert hat.<\/p>\n<p><strong>Nachtrag (07.03.2010):<\/strong> Es gibt auch einen entsprechenden Bug auf Connect:<br \/>\n<a href=\"https:\/\/connect.microsoft.com\/VisualStudio\/feedback\/details\/648543\/tr1-regex-doesnt-match-a-valid-pattern-with-repetition#tabs\">https:\/\/connect.microsoft.com\/VisualStudio\/feedback\/details\/648543\/tr1-regex-doesnt-match-a-valid-pattern-with-repetition#tabs<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der regex Implementierung von VS-2010 ist ein relativ fataler Bug drin, der auftritt, wenn man Repetitions (Wiederholungen, {n}) verwendet. Wie zum Beispiel hier in diesem Beispiel. #include &lt;stdio.h&gt; #include &lt;ios&gt; #include &lt;iostream&gt; #include &lt;ostream&gt; #include &lt;regex&gt; #include &lt;string&gt; using namespace std; void test(const string&amp; s, const string&amp; reg) { cout &lt;&lt; &#8222;&#8212;&#8212;&#8212;&#8212;&#8212;&#8220; &lt;&lt; endl; &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2011\/03\/04\/bug-vc-2010-regex-liefert-falsche-ergebnisse-bei-verwendung-von-repetitionswiederholungen\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eBUG: VC-2010 regex liefert falsche Ergebnisse bei Verwendung von Repetitions\/Wiederholungen\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30,3,27,172],"tags":[99,370,248,174,106,44,171],"class_list":["post-767","post","type-post","status-publish","format-standard","hentry","category-c","category-programmieren","category-vs2008","category-vs2010","tag-bug","tag-c","tag-c0x","tag-stl","tag-tr1","tag-vs-2008","tag-vs-2010"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=767"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/767\/revisions"}],"predecessor-version":[{"id":773,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/767\/revisions\/773"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=767"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}