{"id":2737,"date":"2016-04-20T18:01:32","date_gmt":"2016-04-20T18:01:32","guid":{"rendered":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=2737"},"modified":"2017-07-11T08:10:02","modified_gmt":"2017-07-11T08:10:02","slug":"spass-mit-regex","status":"publish","type":"post","link":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=2737","title":{"rendered":"Spass mit Regex"},"content":{"rendered":"<p>Die Aufgabenstellung war, Zeilen zu finden, die eine ge\u00f6ffnete Klammer enthalten, aber danach keine schliessende.<\/p>\n<p>Die L\u00f6sung:<\/p>\n<p><strong>(?m)^.*?\\([^\\)]*?$<\/strong><\/p>\n<p>Erkl\u00e4rung<\/p>\n<ul>\n<li>(?m) bewirkt, dass \u00fcber das Zeilenende hinaus gesucht wird<\/li>\n<li>^ Zeilenanfang<\/li>\n<li>.*? eine beliebige Zeichengruppe, aber durch das Fragezeichen non greedy<\/li>\n<li>\\( die ge\u00f6ffnete Klammer (muss mit \\ escaped werden)<\/li>\n<li>([^\\)]*?$ bis zum Zeilenende $ darf jedes beliebige Zeichen beliebig oft vorkommen *? ausser die geschlossene Klammer [^\\)]<\/li>\n<\/ul>\n<p>Im folgenden Text erf\u00fcllt die Zeile &#8220;Was (ist ) mit so was(?&#8221; als erstes die Bedingung.<\/p>\n<p><strong>Hallo<\/strong><br \/>\n<strong>Das hier ist eine Zeile die (303) enth\u00e4lt<\/strong><br \/>\n<span style=\"color: #ff0000;\"><strong>Was (ist ) mit so was(?<\/strong><\/span><br \/>\n<strong>und hier) geht es (noch weiter<\/strong><br \/>\n<strong>Der hier nicht) <\/strong><br \/>\n<strong>der (<\/strong><\/p>\n<p>Der angegebene Regex-Ausdruck findet allerdings nur die erste Zeile, die diese Bedingung erf\u00fcllt.<\/p>\n<p>Quellen:<\/p>\n<ul>\n<li><a href=\"https:\/\/ragnar-f.github.io\/docs\/misc\/RegEx-QuickRef.htm\" target=\"_blank\">https:\/\/ragnar-f.github.io\/docs\/misc\/RegEx-QuickRef.htm<\/a><\/li>\n<li>mein Artikel zu Grails \/ Groovy enth\u00e4lt einen l\u00e4ngeren <a href=\"https:\/\/www.ecotronics.ch\/webdesign\/grails.htm#Snippets\" target=\"_blank\">Abschnitt zu Regex<\/a><\/li>\n<\/ul>\n<h1>Apostroph ersetzen mit Notepad++<\/h1>\n<p>Und gleich noch eine Knacknuss: F\u00fcr einen Datenimport musste ich die Apostroph verdoppeln, aber nat\u00fcrlich nur jene, die nicht bereits doppelt daherkamen.<\/p>\n<p>Die Daten sahen ungef\u00e4hr so aus:<\/p>\n<p>&#8220;9659&#8221;,&#8221;1718&#8243;,&#8221;Gewinde-Adapter 45&#8242; Bogen&#8221;,&#8221;06MUX06MU45&#8243;,&#8221;&#8221;,&#8221;1&#8243;,&#8221;Stk.&#8221;,&#8221;52&#8243;<br \/>\n&#8220;9660&#8221;,&#8221;1718&#8243;,&#8221;Gewinde-Adapter 37&#8221;&#8221;,&#8221;06NUX06MT&#8221;,&#8221;&#8221;,&#8221;1&#8243;,&#8221;Stk.&#8221;,&#8221;9.7&#8243;<\/p>\n<p>Als Tool daf\u00fcr habe ich Notepad++ in der Version 6 gew\u00e4hlt.<\/p>\n<p>Die Aufgabe l\u00e4sst sich mit folgenden Regex-Ausdr\u00fccken l\u00f6sen<\/p>\n<p>Suche: <strong>([^&#8217;])'([^&#8217;])<\/strong><\/p>\n<p>Ersetzen: <strong>\\1&#8221;\\2<\/strong><\/p>\n<p>Gesucht werden alle Apostroph, die weder vorn noch hinten ein weiteres Apostroph haben. Mit den Klammern werden zwei Gruppen erzeugt, auf die dann beim Ersetzen wieder Bezug genommen wird.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Aufgabenstellung war, Zeilen zu finden, die eine ge\u00f6ffnete Klammer enthalten, aber danach keine schliessende.<\/p>\n<p>Die L\u00f6sung:<\/p>\n<p>(?m)^.*?\\([^\\)]*?$<\/p>\n<p>Erkl\u00e4rung<\/p>\n<p> (?m) bewirkt, dass \u00fcber das Zeilenende hinaus gesucht wird ^ Zeilenanfang .*? eine beliebige Zeichengruppe, aber durch das Fragezeichen non greedy \\( die ge\u00f6ffnete Klammer (muss mit \\ escaped werden) ([^\\)]*?$ bis zum Zeilenende $ darf [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[306],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2737"}],"collection":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2737"}],"version-history":[{"count":5,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2737\/revisions"}],"predecessor-version":[{"id":2859,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2737\/revisions\/2859"}],"wp:attachment":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}