tag:forum.selfhtml.org,2005:/selfRegExp: \b matcht auch Umlaute? – SELFHTML-Forum2006-05-20T18:46:52Zhttps://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973326#m973326Andreas Dölling2006-05-20T12:31:24Z2006-05-20T12:31:24ZRegExp: \b matcht auch Umlaute?<p>Hallo,</p>
<p>ist es richtig, daß \b auch Umlaute als Wortgrenze macht?<br>
Wenn ja: was kann man dagegen tun?<br>
Ich habe in einem Text (UTF-8) das Wort "Geräte". Den Text will ich in zwei Hälften teilen.<br>
Dazu verwende ich diesen Ausdruck:<br>
preg_match("/^(.{0,".(strlen($contents)/2+20)."})(?:\b)(.*)$/sm", $contents, $matches);</p>
<p>Das klappt auch ganz wunderbar - $matches[1] enthält die erste Hälfte, $matches[2] die zweite, wobei normalerweise kein Wort zerschnitten wird.<br>
Bei dem Text mit dem Wort "Geräte" allerdings steht dieses Wort am Ende der ersten Hälfte und wird nach dem "ä" abgeschnitten, anstatt daß das tatsächliche Wortende oder das Ende des vorhergehenden Wortes benutzt wird.</p>
<p>Hattet Ihr mit diesem Problem schon zu tun? Wie habt Ihr es gelöst?</p>
<p>Thanx und ciao,<br>
Andreas</p>
<div class="signature">-- <br>
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design" eines großen Konzerns...)
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973335#m973335Andreas Dölling2006-05-20T12:36:38Z2006-05-20T12:36:38ZNoch eine Anmerkung<p>Hallo,</p>
<p>ersetze ich in dem besagten Text die "ä" durch "a", dann klappt es - das Wort "Gerate" wird nicht geteilt.<br>
Quod erat demonstrandum.</p>
<p>Wie also umgehen mit diesem Problem?</p>
<p>Ciao,<br>
Andreas</p>
<div class="signature">-- <br>
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design" eines großen Konzerns...)
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973332#m973332Christian Kruseckruse@wwwtech.dehttp://wwwtech.de/2006-05-20T12:53:32Z2006-05-20T12:53:32ZRegExp: \b matcht auch Umlaute?<p>你好 Andreas,</p>
<p>worauf \b matcht, hängt vom <a href="http://de.php.net/setlocale" rel="nofollow noopener noreferrer">Locale</a> ab.</p>
<p>再见,<br>
克里斯蒂安</p>
<div class="signature">-- <br>
<a href="http://ck.kennt-wayne.de/fruehling" rel="nofollow noopener noreferrer">Frühling</a> | <a href="http://ck.kennt-wayne.de/programmierer-auf-crack" rel="nofollow noopener noreferrer">Programmierer auf Crack</a><br>
Das Sein entsteht aus dem Nicht-Sein.<br>
<a href="http://wwwtech.de/" rel="noopener noreferrer">http://wwwtech.de/</a><br>
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973330#m973330sethemail_selfforum@wg-karlsruhe.dehttp://www.bierdatenbank.de2006-05-20T13:02:39Z2006-05-20T13:02:39ZRegExp: \b matcht auch Umlaute?<p>gudn tach!</p>
<blockquote>
<p>ist es richtig, daß \b auch Umlaute als Wortgrenze macht?</p>
</blockquote>
<p><a href="http://de3.php.net/manual/en/reference.pcre.pattern.syntax.php#regexp.reference.backslash" rel="nofollow noopener noreferrer">u.u.</a></p>
<blockquote>
<p>Wenn ja: was kann man dagegen tun?</p>
</blockquote>
<p>evtl. waere eine moeglichkeit <a href="http://php.net/setlocale" rel="noopener noreferrer">setlocale</a>.<br>
eine andere moeglichkeit: \b und \w nachbauen...</p>
<p>"A word boundary is a position in the subject string where the current character and the previous character do not both match \w or \W (i.e. one matches \w and the other matches \W), or the start or end of the string if the first or last character matches \w, respectively." (aus dem php-manual ueber pcre)</p>
<blockquote>
<p>Ich habe in einem Text (UTF-8)</p>
</blockquote>
<p>dann wird dir evtl. <a href="http://de3.php.net/manual/en/reference.pcre.pattern.syntax.php#regexp.reference.unicode" rel="nofollow noopener noreferrer">das</a> weiterhelfen.</p>
<blockquote>
<p>(?:\b)</p>
</blockquote>
<p>ist uebrigens das gleiche wie</p>
<p>\b</p>
<blockquote>
<p>Hattet Ihr mit diesem Problem schon zu tun?</p>
</blockquote>
<p>noe, ich vermeide umlaute und sz bzw. ersetze sie.</p>
<p>prost<br>
seth</p>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973327#m973327Andreas Dölling2006-05-20T13:23:42Z2006-05-20T13:23:42ZLösung?<p>Hallo,</p>
<p>ich habe nun doch Seths Vorschlag aufgegriffen, mir \b selbst zusammenzusetzen. War dann doch nicht so problematisch (im Gegensatz zur Definition von \w).<br>
Mein regulärer Ausdruck sieht nun so aus:<br>
/^(.{0,".(strlen($contents)/2+20)."})<a href=".*" rel="noopener noreferrer">\s,.!?-</a>$/sm</p>
<p>Und damit klappt es.<br>
Seht Ihr noch Schwachstellen?</p>
<p>Danke auf jeden Fall für die superschnelle Hilfe!</p>
<p>Ciao,<br>
Andreas</p>
<div class="signature">-- <br>
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design" eines großen Konzerns...)
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973328#m973328Andreas Dölling2006-05-20T13:33:32Z2006-05-20T13:33:32ZLösung?<p>Hallo,</p>
<blockquote>
<p>/^(.{0,".(strlen($contents)/2+20)."})<a href=".*" rel="noopener noreferrer">\s,.!?-</a>$/sm</p>
</blockquote>
<p>da es auch ungerade Zahlen gibt, sollte es dann doch besser so aussehen:<br>
/^(.{0,".(ceil(strlen($contents)/2)+20)."})<a href=".*" rel="noopener noreferrer">\s,.!?-</a>$/sm</p>
<p>;)</p>
<p>Ciao,<br>
Andreas</p>
<div class="signature">-- <br>
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design" eines großen Konzerns...)
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973329#m973329sethemail_selfforum@wg-karlsruhe.dehttp://www.bierdatenbank.de2006-05-20T15:15:32Z2006-05-20T15:15:32ZLösung?<p>gudn tach!</p>
<blockquote>
<p>/^(.{0,".(ceil(strlen($contents)/2)+20)."})<a href=".*" rel="noopener noreferrer">\s,.!?-</a>$/sm</p>
</blockquote>
<p>das ist aber nicht mehr das gleiche vie vorher, denn vorher wurde das worttrennzeichen in $1 oder $2 (je nach laenge von $contents und der position des trennzeichens) gespeichert. jetzt geht es floeten.</p>
<p>btw.: je nach beschaffenheit des strings und den informationen, die dir darueber vorliegen, kann es besser sein die zeichenklasse der trennzeichen als negierte nicht-trennzeichen-klasse zu betrachten. also statt [\s,.!?-] [^a-zA-Z0-9_äöüÄÖÜß].</p>
<p>eine etwas mehr an \b angelehnte nachbau-idee ist uebrigens folgende:<br>
$z='[a-zA-Z0-9_äöüÄÖÜß]';<br>
$n='[^a-zA-Z0-9_äöüÄÖÜß]';<br>
(?:(?<!$z)(?!$n)|(?<!$n)(?!$z))<br>
spontan faellt mir kein beispiel ein, bei welchem \b und dieses ding was unterschiedliches machen wuerden (mal von von den locale-einstellungen abgesehen).</p>
<p>prost<br>
seth</p>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973331#m973331Andreas Dölling2006-05-20T13:18:56Z2006-05-20T13:18:56ZRegExp: \b matcht auch Umlaute?<p>Hallo,</p>
<blockquote>
<p>eine andere moeglichkeit: \b und \w nachbauen...</p>
</blockquote>
<p>ungern...</p>
<blockquote>
<p>"A word boundary is a position in the subject string where the current character and the previous character do not both match \w or \W (i.e. one matches \w and the other matches \W), or the start or end of the string if the first or last character matches \w, respectively." (aus dem php-manual ueber pcre)</p>
</blockquote>
<p>Ja, hast recht - aus dieser Definition geht klar hervor, daß \b abhängig von der locale-Einstellung ist.</p>
<blockquote>
<p>dann wird dir evtl. <a href="http://de3.php.net/manual/en/reference.pcre.pattern.syntax.php#regexp.reference.unicode" rel="nofollow noopener noreferrer">das</a> weiterhelfen.</p>
</blockquote>
<p>Phew - damit habe ja noch nie gearbeitet.</p>
<blockquote>
<p>noe, ich vermeide umlaute und sz bzw. ersetze sie.</p>
</blockquote>
<p>Hm, genau _das_ will ich aber nicht mehr. Ich bin gerade dabei, das Textarchiv eines Fanzines zu "säubern", wo im Moment alle Texte als HTML mit Umlaut-Entities und ziemlich verschwurbeltem Old-School-Markup vorliegen.<br>
Und ein Ziel ist es auch, die Texte als saubere UTF-8-Texte vorliegen zu haben - ohne Entities, mit ganz normalen Umlauten.</p>
<blockquote>
<p>prost</p>
</blockquote>
<p>Erst heute abend!<br>
;)</p>
<p>Ciao,<br>
Andreas</p>
<div class="signature">-- <br>
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design" eines großen Konzerns...)
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973333#m973333Andreas Dölling2006-05-20T13:02:04Z2006-05-20T13:02:04ZRegExp: \b matcht auch Umlaute?<p>Hallo,</p>
<p>danke für den Tipp!<br>
Leider ändert sich aber auch mit setlocale(LC_ALL, 'de_DE'); oder mit setlocale(LC_TIME, 'de_DE.UTF8'); nichts am Verhalten meines Scripts.<br>
:/</p>
<p>Ciao,<br>
Andreas</p>
<div class="signature">-- <br>
"Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design" eines großen Konzerns...)
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973334#m973334Christian Kruseckruse@wwwtech.dehttp://wwwtech.de/2006-05-20T13:04:08Z2006-05-20T13:04:08ZRegExp: \b matcht auch Umlaute?<p>你好 Andreas,</p>
<blockquote>
<p>Leider ändert sich aber auch mit setlocale(LC_ALL, 'de_DE'); oder mit setlocale(LC_TIME, 'de_DE.UTF8'); nichts am Verhalten meines Scripts.<br>
:/</p>
</blockquote>
<p>ich glaube, setlocale(LC_ALL,"de_DE.UTF8") wäre auch sinnvoller :) Vorrausgesetzt, das Locale existiert, das musst du natürlich vorher nachprüfen.</p>
<p>再见,<br>
克里斯蒂安</p>
<div class="signature">-- <br>
<a href="http://ck.kennt-wayne.de/fruehling" rel="nofollow noopener noreferrer">Frühling</a> | <a href="http://ck.kennt-wayne.de/programmierer-auf-crack" rel="nofollow noopener noreferrer">Programmierer auf Crack</a><br>
Kommt ein Vektor zur Drogenberatung: "Hilfe, ich bin linear abhaengig!"<br>
<a href="http://wwwtech.de/" rel="noopener noreferrer">http://wwwtech.de/</a><br>
</div>
https://forum.selfhtml.org/self/2006/may/20/regexp-b-matcht-auch-umlaute/973336#m973336EisFuXselfhtml@eisfux.de2006-05-20T18:46:52Z2006-05-20T18:46:52Z/u und [:alpha:]<p>Hallo Andreas,</p>
<blockquote>
<p>ersetze ich in dem besagten Text die "ä" durch "a", dann klappt es - das Wort "Gerate" wird nicht geteilt.<br>
Quod erat demonstrandum.</p>
<p>Wie also umgehen mit diesem Problem?</p>
</blockquote>
<p>Es gibt einen Modifikator '/u' für UTF-8-Patterns.<br>
Und wenn ich Zeichenklassen mit _allen_ definierten Buchstaben brauche, benutze ich '[:alpha:]' und nicht 'a-zA-Z' oder '\w'. Möglicherweise kann ja '/[<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>]/' dein '\b' ersetzen ...</p>
<p>MffG<br>
EisFuX</p>
<div class="signature">-- <br>
Auch meine Hosenträger sind intelligent, in dem Sinne, das man sie regulieren kann. Sie besitzen ein adaptives Verhalten.<br>
<a href="http://de.wikipedia.org/wiki/Stanis%C5%82aw_Lem" rel="nofollow noopener noreferrer">Stanisław Lem</a><br>
<img src="http://alopex.pyrokar.lima-city.de/img.php/fox_048.gif" alt="" loading="lazy">
</div>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>:alpha: <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>