Problem mit preg_match

Weil ein Punkt kein Buchstabe ist.... somit ist die Wortgrenze bereits dort, wenn er auf einen Buchstaben folgt, und nicht erst am Ende des Synonyms
 
Gibt es also dann keine Möglichkeit die Punkte miteinzubeziehen ?
Gehen dann allgemein keine Sonderzeichen, auch wie z.B. - ?

Das ist mein aktueller Code:
Code:
function check_synonyms($text)
{

	global $pref;
	
	$r_synonym = thwb_query("SELECT syn, syn_description FROM $pref"."synonyms ORDER BY syn ASC");
	if( mysql_num_rows($r_synonym) != 0 )
	{
		while( $synonym = mysql_fetch_array($r_synonym) )
		{
			if (preg_match("/\b{$synonym[syn]}\b/",$text)) 
			{
			$desc = "[acronym=\"".$synonym[syn]."\"]".$synonym[syn_description]."[/acronym]";
			$text = preg_replace("/\b$synonym[syn]\b/", $desc, $text);
			}
		}
	}

	return $text;
}
 
So, muss den Thread nochmal aus der Tiefe holen ! Ich habe noch ein Problem entdeckt !
Zur Zeit sieht die Abfrage so aus:
Code:
if (preg_match("/\b{$synonym[syn]}\b/",$text))

Jetzt habe ich aber das Problem, das wenn z.B. jemand eine URL postet die geparst wird, in der aber ein Wort auftacht das in der Datenbank steht, z.b. TÜV bei http://www.tüv.de, dann zerlegt es die URL, da TÜV dann mit dem acronym Tag geparst wird ! Das soll nicht sein !

Es soll also wirklich nur auf das Wort geprüft werden, vorher und nachher darf kein Bcuhstabe oder kein Zeichen kommen, erlaubt
Code:
TÜV

nicht erlaubt:
Code:
\TÜV\
\TÜV.de
TÜV\
TÜVer

als Beispiele !
 
Zuletzt bearbeitet:
Hi

Hab schon an Begrenzungen der Abkürzungen gedacht, aber man wird wohl nie allen Usern beibiegen können, diese auch so zu benutzen, wie man's bräuchte.
Wie sieht es aus, Du kannst doch den Ort der Abkürzung suchen *hoff*.
Dann suchst Du noch den einleitenden URL-BB-Code oder den A-Tag und das zugehörige Ende von Diesen.
Wenn Deine Ersetzung innerhalb dieser Grenzen ist, nicht ersetzen.

Viel mehr Aufwand, wenn eine/mehrere URL's angegeben wurde/n, müsste aber klappen.

MfG
Posti

**EDIT**
Oder eben nach nem www. (einleitend) und einem Leerzeichen (ausleitend), fals nur die URL als Text angegeben wurde.
Wenn da allerdings KEIN www. angegeben wurde klappt's auch nicht - würde auch nicht klickbar funktionieren.
**ENDE**
 
Das wäre aber zu viel Aufwand, denn es gibt zu viel BB Tags, 6-8 Stück die geprüft werden müssten !

Das müsste doch mit preg_mactch einfacher gehen und der Wortgrenze !
Da müssten dan quasi in die Abfrage hinzu die Sonderzeichen, Leerezeichen und alle Zahlen und Buchstaben, am Anfang und am Ende

oder

es muss vor dem Wort ein Leerzeichen sein und nach dem Wort ein Leerzeichen !
Wie würde sich das realisieren lassen ?

Würde das dann so aussehen ?
Code:
if (preg_match("/\b[^ ]{$synonym[syn]}[^ ]\b/",$text))
 
Zuletzt bearbeitet:
Erweitere den Ausduck doch einfach auf die Zeichen, die vor bezeihungsweise nach dem Wort stehen dürfen.

Übrigens muss der Hostname eines URL nicht immer eine Subdomain enthalten.
 
PhoenixDH hat gesagt.:
...

es muss vor dem Wort ein Leerzeichen sein und nach dem Wort ein Leerzeichen !
Wie würde sich das realisieren lassen ?

Würde das dann so aussehen ?
Code:
if (preg_match("/\b[^ ]{$synonym[syn]}[^ ]\b/",$text))

Sagte ich ja, nur erlaubt vor und nach dem Wort ist ein Leerzeichen, würde dazu die Abfrage stimmen aus dem Zitat ?

Hm, also ich hatte es so, aber das funktioniert nicht zuverllässig irgendwie oder ist da ein Fehler drin ?
Code:
if (preg_match("/\b[ ]{$synonym[syn]}\b/",$text))

Habe nur das Leerzeichen vorher als Bedingung gemacht, somit wird es in URL verhindert, aber in Aufzähluingen oder Sätzen mit , und . geht es dann nocht !
 
Zuletzt bearbeitet:
Hi

Das Problem wird aber meines Erachten weiter bestehen bleiben.
Du kannst nicht davon ausgehen, daß vor unt hinter einer Abkürzung ein Leerzeichen steht.
Es könnten genau so gut Klammern sein, nen Doppelpunkt davor, nen Punkt dahinter.
Klar ist das prüfen, ob man sich in einem Tag (BB oder HTML) befindet eine sehr aufwändige Sache, würde aber die Abkürzungen im gesamten übrigen Text finden / ersetzen.
Stelle mir das gerade vor, wie ich das anstellen würde ... wow ... viel Arbeit drin ... man merkt mal wieder, daß Programmieren doch irgendwie mit viel Nachdenken zu tun hat, überraschend, daß ich sowas (also proggen) auch hinbekomme *gg*

Mit den Leerzeichen ist auch das Problem, daß die Leute alle einen anderen Schreibstil haben.
Selber achte ich drauf, daß ich hinter jedem Satzzeichen ein Leerzeichen verwende (sieht besser aus und ist besser lesbar *denk*), wodurch auch wieder das ggf. benötigte, begrenzende Leerzeichen am Ende einer Abkürzung wegfallen würde.

Gar nicht so einfach, aber die Idee ist astrein!!

MfG
Posti
 
Das ganze funktioniert ja auch soweit, bis auf URLS die in das FOrum gepostet werden ohne [ url ] Tag davor und dahinter, ich könnte auch das Parsen für diese URL's ganz aussschalten, abewr das will ich auch nicht !
 
Hi

Wenn Du diese Probleme momentan nur noch in den URL's hast, kannst Du doch die URL's heraussuchen und in TAG's umwandeln (netter Nebeneffekt: klickbar) und danach den Text nach 'nicht-Tag' Bereichen zu durchsuchen, worin Du dann die Abkürzungen ersetzen kannst.

Mit ereg url's suchen und ggf. in TAG umwandeln (ich meinte, was gesehen zu haben, also URL erkennen, find es aber gerade nicht mehr)

Dann den Text zwischen Tag's auslesen:
(gg. auf BB-Code umbauen)
http://www.php.net/manual/de/function.preg-match-all.php

Diesen Zwischentext kannst Du dann auf Abkürzungen durchsuchen, ohne Deine URL's zu schädigen.

Fehlt eigendlich nur noch, das ganze Zeug wieder zusammen zu setzen *denk*

MfG
Posti
 
Zurück