php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 12-06-2010, 18:49
Jeremy
 Registrierter Benutzer
Links : Onlinestatus : Jeremy ist offline
Registriert seit: Jun 2010
Beiträge: 4
Jeremy befindet sich auf einem aufstrebenden Ast
Standard preg-match für einzelne wörter im Satz

Hallo, ich benutze dies Abfrage um bei Wörtern die nur einen Vokal haben vor diesen einen Slash zu setzen:

Zitat:
if (!mb_strstr($text,"/") AND preg_match_all("![аеиоуяюёэы]!u",$text,$dummy)==1) $text = preg_replace("!(.*)([аеиоуяюёэйы])!u","$1/$2",$text);
Das funktioniert gut bei einzelnen Wörtern, aber wenn ich nun einen Satz mit mehreren Wörtern habe, dann kommen ja insgesamt mehrere Vokale vor auch wenn es wörter mit nur einem gibt. Gibt es nun eine möglichkeit, das bei dem regulären ausdruck zu berücksichtigen, oder muss ich den satz erst in wörter zerstückeln?

Gruß
Mit Zitat antworten
  #2 (permalink)  
Alt 12-06-2010, 19:01
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Man kann das Vorkommen von word boundaries verlagen.
http://www.php.net/manual/en/regexp.....backslash.php

Allerdings ist die Definition, was eine Wortgrenze darstellt, von der im System eingestellten locale abhängig.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 12-06-2010, 20:00
Jeremy
 Registrierter Benutzer
Links : Onlinestatus : Jeremy ist offline
Registriert seit: Jun 2010
Beiträge: 4
Jeremy befindet sich auf einem aufstrebenden Ast
Standard

danke für die Antwort, aber da blick ich gar nicht durch ?!
Mit Zitat antworten
  #4 (permalink)  
Alt 13-06-2010, 22:23
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Hier mal ein Lösungsansatz. Die beiden Zeichenklassen hab ich aus reiner Bequemlichkeit nur mit ASCII-Buchstaben getestet. Du darfst sie aber gerne mit den von dir benötigten Vokalen und Konsonanten füllen. Es müssen aber alle Buchstaben erfasst werden, sonst funktioniert das Ganze nicht. Groß- und Kleinbuchstaben müssen jeweils extra aufgelistet werden. Der Modifikator /i könnte hier Arbeit abnehmen, funktioniert aber leider nicht mit UTF-8 und auch nicht mit Codepages (das Locale-Geraffel).

PHP-Code:
$pcre '/
    (?(DEFINE)(?<vowel>[AEIOUaeiou]))
    (?(DEFINE)(?<nonvowel>[BCDFGHJ-NP-TV-Zbcdfghj-np-tv-z]))

    (?<=\P{L}|\A)(?=(?&nonvowel)*(?&vowel)(?&nonvowel)*(?:\P{L}|\z))
/xU'
;

preg_match_all($pcre$kopna$goli);
var_dump($goli);

$replaced preg_replace($pcre'-$0'$kopna);
var_dump($replaced); 
Der RegEx ist prinzipiell UTF-8-tauglich. Du musst aber beim Auffüllen der Zeichenklassen darauf achten, dass dein Editor auch UTF-8 unterstützt. Wenn er das nicht tut, solltest du die Zeichen als \x{NNN}-Sequenzen eingeben.

Zitat:
Zitat von Jeremy Beitrag anzeigen
danke für die Antwort, aber da blick ich gar nicht durch ?!
"Word-boundaries sind locale-abhängig", heißt:

1.) "Wortgrenzen" suchen nach Buchstaben-Nichtbuchstaben-Kombinationen. Ein "Wort" in PCRE besteht immer aus Buchstaben. Ein Nicht-Wort-Bereich besteht aus allen anderen Zeichen (aber nicht aus Buchstaben).

2.) Was ein Buchstabe ist, wird in PHP's PCRE durch die setlocale()-Einstellung mitbestimmt. Die Zeichenklassen [A-Za-z] gehören zum ASCII-Bereich und sind immer Buchstaben. Deutsche Umlaute und Buchstaben mit Akzent stehen auf Zeichenpositionen oberhalb des ASCII-Bereichs. Abhängig von der verwendeten Codepage kann die gleiche Zeichenposition einen Buchstaben oder einen Nicht-Buchstaben darstellen.

Geändert von fireweasel (21-06-2010 um 11:29 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 19-06-2010, 18:18
Jeremy
 Registrierter Benutzer
Links : Onlinestatus : Jeremy ist offline
Registriert seit: Jun 2010
Beiträge: 4
Jeremy befindet sich auf einem aufstrebenden Ast
Standard

hi,

vielen dank für den code,klappt schonmal ziemlich gut, dass er die richtigen wörter rausfindet. Allerdings packt er beim replace das Zeichen genau vor das wort und nicht vor den entsprechenden vokal im Netz, wie könnte man das noch ändern?

Gruß
Mit Zitat antworten
  #6 (permalink)  
Alt 21-06-2010, 11:26
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Jeremy Beitrag anzeigen
hi,

vielen dank für den code,klappt schonmal ziemlich gut, dass er die richtigen wörter rausfindet. Allerdings packt er beim replace das Zeichen genau vor das wort und nicht vor den entsprechenden vokal im Netz, wie könnte man das noch ändern?
This behaviour is intentional. ... oder so ähnlich. Ich hatte deine Problemstellung so verstanden. Sonst hätte ich den Regex nicht in eine Assertion gesteckt.

So müsste das jetzt besser passen:
PHP-Code:
$pcre '/
    (?(DEFINE)(?<vowel>[AEIOUaeiou]))
    (?(DEFINE)(?<nonvowels>[BCDFGHJ-NP-TV-Zbcdfghj-np-tv-z]*))


    (?<=\P{L}|\A)(?&nonvowels)(?&vowel)(?&nonvowel)(?=\P{L}|\z)
/xU'
;

preg_match_all($pcre$kopna$goli);
var_dump($goli);

$replaced preg_replace($pcre'$1-$2$3'$kopna);
var_dump($replaced); 
Man beachte die kleine (aber wichtige) Änderung im "nonvowel"-Bereich.

Geändert von fireweasel (21-06-2010 um 11:29 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 22-06-2010, 00:19
Jeremy
 Registrierter Benutzer
Links : Onlinestatus : Jeremy ist offline
Registriert seit: Jun 2010
Beiträge: 4
Jeremy befindet sich auf einem aufstrebenden Ast
Standard

hallo, klappt leider auch nicht

Da ist noch ein kleiner rechtschreibfehler (nonvowel statt nonvowels), aber auch dann ersetzt er nun leider gar nichts mehr bei einem normalen wort,hat man allerdings nur einen Vokal ohne Konsonant wird der einfach komplett gelöscht..
Mit Zitat antworten
  #8 (permalink)  
Alt 25-06-2010, 21:29
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Jeremy Beitrag anzeigen
hallo, klappt leider auch nicht

Da ist noch ein kleiner rechtschreibfehler (nonvowel statt nonvowels), aber auch dann ersetzt er nun leider gar nichts mehr bei einem normalen wort,hat man allerdings nur einen Vokal ohne Konsonant wird der einfach komplett gelöscht..
Huch, werd ich hier nach Stunden bezahlt?
Selbst ist der debuggende Scriptbastler, oder so ähnlich ...

Nimm dir einen "Heuhaufen"-String vor, in dem ein Wort vorkommt, dass vor und nach dem einzigen Konsonant mehrere Vokale hat. Dann wirfst du das preg_match() zum Fraß vor. Lass dir das Treffer-Array anzeigen. Die Index-Nummern der Einträge, die die "Vor"-Konsonanten, den Vokal und die "Danach"-Konsonanten enthalten, sollten die richtigen Nummern sein. Mit diesen ersetzt du die Nummern in meinem ursprünglichen Ersetzen-String.

Es dürfte sich mit hoher Wahrscheinlichkeit um 3, 4 und 5 handeln (also '$3-$4$5'). Ich hatte vergessen, dass die DEFINE-Subpattern auch mitgezählt werden müssen. Die sind noch etwas neu für mich.

Das mit den "nonvowels" hatte ich tatsächlich übersehen.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Preg Match Fehler chrisphp PHP Developer Forum 12 08-04-2005 21:10
Erweiterte Suchfunktion mit Joker, einzelne Buchstaben, mehrere Wörter trashing PHP Developer Forum 1 18-04-2004 11:23
einzelne Wörter einer "textarea" mittels Button formatieren mnjakob HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 6 03-12-2003 16:06
[REGEX] preg match problem Seikilos PHP Developer Forum 17 06-07-2003 20:28
Durch Wörter viele einzelne Seiten erstellen. coder PHP Developer Forum 9 09-10-2002 15:10

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:32 Uhr.