- Ad -
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! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #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: 24.486
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: 680
fireweasel 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.
__________________
PHP-Code:
class Brick implements Throwable {
    
// ... 


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: 680
fireweasel 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.
__________________
PHP-Code:
class Brick implements Throwable {
    
// ... 


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: 680
fireweasel 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.
__________________
PHP-Code:
class Brick implements Throwable {
    
// ... 

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 und CSS 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

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:11 Uhr.