PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wortfilter


juergen
01.09.2009, 09:57:30
Hallo Forum,

zunächst möchte ich mich bei allen bedanken die mir hier Ihre Zeit und Aufmerksamkeit bei meinen Problemen geschenkt haben.
Heute habe ich ein Problem mit dem ich mich schon einige Tage beschäftige.

Also ich möchte aus einem String Wörter mit vorgegebenen Zeichen bzw. Mustern durch andere Wörter ersetzten. Wörter mit vorgegebenen Zeichen sind alle Wörter die ein @ Zeichen haben und Wörter mit vorgegebenen Mustern sollen sein z.B. www.eineseite.de also Wörter mit www. und .

So soll es aussehen:
Aus: egalwas@irgendwas.eine Endung => soll z.B. E-Mail werden
Aus: www.irgendwas.eine Endung => soll z.B. Webseite werden
Aus: http://www.irgendwas.eine Endung => soll z.B. Webseite werden
Aus: http://www.irgendwas.eineEndung/verzeichnis/nocheins/info.htm => soll z.B. Webseite werden

usw. usw.

Kann mir da jemand helfen?

Domi
01.09.2009, 10:08:10
Hi,

sowas kannst du wunderbar mit regulären Ausdrücken lösen. Welche Ansätze hast du denn in den einigen Tagen schon versucht? Zeig doch einfach mal bissle was her, dann helfen wir dir auf die Sprünge =)

lg
Domi

juergen
01.09.2009, 11:21:13
Hallo Domi,

ich habe eigendlich nicht viel experimentiert. Ich verwende an anderer Stelle einen Bad Word Filter (habe ich nicht selbst geschrieben) der aber nicht das macht was ich will. Der findet z.B. sau und macht daraus xxx aber auch in ganzen Wörtern z.B. sauber = xxxber

Domi
01.09.2009, 11:32:22
Hallo Domi,

ich habe eigendlich nicht viel experimentiert. Ich verwende an anderer Stelle einen Bad Word Filter (habe ich nicht selbst geschrieben) der aber nicht das macht was ich will. Der findet z.B. sau und macht daraus xxx aber auch in ganzen Wörtern z.B. sauber = xxxber

hier wäre doch die Lösung nach ' sau ' (also vorne und hinten leerzeichen) zu suchen, oder eben per regex, dass es nicht nur Leerzeichen sondern auch punkt, komma, .... sein können.. (oder eben alles nur kein Buchstabe).

juergen
01.09.2009, 11:44:39
Hallo Domi,

Du meinst also wenn ich in meinem Bad Word Filter als Bad Word nicht "sau" sondern " sau " und " sau" eingebe sollte es bei dem Wort sauber nicht zu xxxber kommen sondern nur wenn vor und/oder hinter dem Wort sau je ein Leerzeichen ist.
Wie zum Beispiel: Der ist doch eine sau! = > Der ist doch eine xxx!
Habe ich Dich richtig verstanden?

Domi
01.09.2009, 11:49:06
hier wäre doch die Lösung nach ' sau ' (also vorne und hinten leerzeichen) zu suchen, oder eben per regex, dass es nicht nur Leerzeichen sondern auch punkt, komma, .... sein können.. (oder eben alles nur kein Buchstabe).

ansonten: ja.

juergen
01.09.2009, 12:09:17
Das sollte mein Bad Word Filter verbessern. Das werde ich heute Abend gleich ausprobieren.

Das löst aber nicht mein eigendliches Problem!
Ich will z.B. das Zeichen @ suchen und daruf hin das ganze Wort austauschen!
Aus z.B. info@schulzj.de soll werden => E-Mail

Wie mach ich das?

feuervogel
01.09.2009, 12:15:42
komisch, ich habe 3 sekunden gebraucht um den regulären ausdruck für eine email zu finden:


(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

quelle: http://www.regular-expressions.info/email.html

Domi
01.09.2009, 12:23:18
komisch, ich habe 3 sekunden gebraucht um den regulären ausdruck für eine email zu finden

jaaaa..... mensch. auf die idee wäre er selber bestimmt auch noch gekommen :]

juergen
01.09.2009, 12:23:27
Hallo feuervogel,

könnte das so aussehen?


$suchmuster = '(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])';
$ersatz = 'E-Mail';
$inhalt = eregi_replace($suchmuster, $ersatz, $inhalt);

Domi
01.09.2009, 12:25:06
Hallo feuervogel,

könnte das so aussehen?


$suchmuster = '(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])';
$ersatz = 'E-Mail';
$inhalt = eregi_replace($suchmuster, $ersatz, $inhalt);


so könnte das aussehen, ja. du musst dir halt den Ersatz bauen mit html-tags usw :) aber auch da würde google paar coole Beispiele liefern ^^

juergen
01.09.2009, 13:42:15
Hallo Domi,

wie meinst Du das?

du musst dir halt den Ersatz bauen mit html-tags usw :)

Domi
01.09.2009, 14:53:13
Hi,

versuch einfach mal damit zu arbeiten und schau ob du zurecht kommst, denke wenn du etwas im Internet stöberst, dann wird dir einiges klar, was hier so steht :)

Domi

juergen
01.09.2009, 18:03:40
Hallo Domi,

bei dem Beispiel von Feuerfogel habe ich noch die Hochkomma maskieren müssen dann funktionierte es so gut das nichts vom Text übrig blieb.
Das war mein Test-Text:

Das ist meine Mailadesse info@schulzj.de die ich im Text erwähnen will.

Jetzt habe ich etwas einfacheres gefunden welches aber nicht fuktioniert! Was mache da falsch?

$suchmuster = '(^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$)';
$ersatz = 'E-Mail';
$data_w = eregi_replace($suchmuster, $ersatz, $data_w);


Wenn ich das hier benutze löscht er alles bis auf das letzte Wort.

$data_w_teile = explode(" ", $data_w);
foreach($data_w_teile as $_go_teile) {

$suchmuster = '(^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$)';
$ersatz = 'E-Mail';
$data_w = eregi_replace($suchmuster, $ersatz, $_go_teile);
}

juergen
01.09.2009, 19:55:37
Jetzt habe ich es geschaft alles mit dem Wort E-Mail zu ersetzten bis auf die Mailadresse selbst!
Ich brauche es aber genau umgedreht.
$suchmuster = '(^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$)';
$ersatz = 'E-Mail';

$data_w_teile = explode(" ", $data_w);
foreach($data_w_teile as $_go_teile) {
$_go = eregi_replace($suchmuster, $ersatz, $_go_teile);
$data_w = str_replace($_go, $ersatz, $data_w);
}

juergen
02.09.2009, 08:43:26
$suchmuster = '(^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$)';
$ersatz = 'E-Mail';

$data_w_teile = explode(" ", $data_w);
foreach($data_w_teile as $_go_teile) {
$data_w = eregi_replace($suchmuster, $ersatz, $_go_teile);

echo $data_w; // DastehtderSatzjetztsomitderE-Maildrin.

}

Wie bekomme ich das jetzt in eine lesbare Form?

vt1816
02.09.2009, 09:23:54
Wie bekomme ich das jetzt in eine lesbare Form?
Was ist daran nicht lesbar? Oder wie war die Frage zu verstehen?

juergen
02.09.2009, 09:55:00
Hallo vt1816,

wenn ich die Variable $data_w in meinem Textfeld mit echo anzeigen lasse steht da nur drin. drin. Ich glaube das die Variable in der Foreach Schleife noch ein Array ist und noch aufbereitet werden muß!?! Sehe ich das richtig?

Oder ist eventuell mein ganzer Ansatz falsch?

tewe
14.09.2009, 14:36:25
Hallo vt1816,

Ich glaube das die Variable in der Foreach Schleife noch ein Array ist und noch aufbereitet werden muß!?! Sehe ich das richtig?

Oder ist eventuell mein ganzer Ansatz falsch?

Oo

Ein Debugger könnte dir wohl viele deiner Fragen beantworten :D

Was dein Problem angeht, kann ich nur mal nen Schuss ins Blaue wagen ^^

$data_w = "Das ist meine Mailadesse Foobar@BarFoo.fb die ich im Text erwähnen will.";
$suchmuster = '(^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$)';
$ersatz = 'E-Mail';

$data_w_teile = explode(" ", $data_w);
foreach($data_w_teile as $_go_teile)
$foo .= eregi_replace($suchmuster, $ersatz, $_go_teile)." ";
// String nicht überschreiben sondern ergänzen & Leerzeichen hinter jedem Wort

echo rtrim($foo); // letztes Leerzeichen entfernen und ausgeben