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, 17: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, 18: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, 19: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, 21: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 10:29 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 19-06-2010, 17: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, 10: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 10:29 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 21-06-2010, 23: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, 20: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 20:10
Erweiterte Suchfunktion mit Joker, einzelne Buchstaben, mehrere Wörter trashing PHP Developer Forum 1 18-04-2004 10:23
einzelne Wörter einer "textarea" mittels Button formatieren mnjakob HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 6 03-12-2003 15:06
[REGEX] preg match problem Seikilos PHP Developer Forum 17 06-07-2003 19:28
Durch Wörter viele einzelne Seiten erstellen. coder PHP Developer Forum 9 09-10-2002 14: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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:07 Uhr.