PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : regulärer ausdruck



mazewei
29-10-2004, 22:35
Hallo,

ich habe folgendes Problem, ich habe Text, möchte in diesem Text . [A-Z] ersetzen durch .\n[A-Z]. Ansich ganz einfach, aber wie kann ich es erreichen, daß nur der . ersetzt wird, aber nicht der Anfangsbuchstabe des darauffolgenden Wortes?


$zeile_1 = ereg_replace('[.][ \t][A-Z]', "\n", $zeile);

So wird die richtige Stelle gefunden, aber die Ersetzung ist falsch. Es wird die gesamte Zeichenkette ersetzt, das geht aber nicht, der erste Buchstabe [A-Z] muß erhalten bleiben, es besteht aber auch keine andere Möglichkeit der Suche nach dem Punkt, da Punkte auch an anderen Stellen vorkommen.

Grüße Matthias

undefined
30-10-2004, 07:02
Du verwendest die falsche Funktion preg_replace() ist hierfür mehr geeignet.
Beispiel:
// Suche nach Punkt an und vor Wortgrenzen
echo preg_replace("/\.\b/", "#", "Mein Stri.ng");
// Übersetzt / = Modifier \. = Suche Punkt \b = Suche an Wortgrenzen / = Modifier
// Suche nach Punkt am ende eines Satzes
echo preg_replace("/\b\.\s/", "#", "Mein Stri.ng");
// Oder - Alle Punkte entfernen.
echo ereg_replace(".", "#", "Mein String. und so weiter");

mazewei
30-10-2004, 23:08
Ich habe folgende Zeile

%Series=The museum visitor, Publication in museology: No. 3 (pp. 103-141)

Am Ende dieser Zeile will ich einen Zeilenumbruch und %Address= einfügen. Ich habe bisher


$zeile12 = preg_replace('/(?=%Series=.*?)[\n]/',"\n%Address=",fgets($fr1));

versucht, aber es klappt einfach nicht, ich verstehe nicht warum?

Grüße Matthias

undefined
31-10-2004, 12:39
Das ist ja wieder etwas ganz anderes wie in deiner ersten Frage.
Wenn du einfach eine Zeile Hinzufügen Möchtest so verwende die Array Funktionen in dem du dein File mit file() in eine Array ziehst und dieses danach einfach mit einer Schleife durchläufst.

<?php

$Suche = "%Series=The museum visitor, Publication in museology: No. 3 (pp. 103-141)";
$Einfuegen = "Neuer String";
$Datei = "./meinedatei.txt";

if ( file_exists( $Datei ) && is_readable( $Datei) )
{
$daten = file( $Datei );
if ( ! sizeof( $daten ) ) die ("Fehler beim Öffnen");
$buffer = array();
foreach ( $daten AS $val )
{
if ( ereg( $Suche, $val ) ) {
$val = $val . "\n" . $Einfuegen;
}
$buffer[] = $val;
}
unset( $Daten );
$newStr = implode("\n", $buffer );
$length = strlen( $newStr );
$fp = fopen( $Datei, "w+" );
fputs( $fp, $newStr, $length );
fclose( $fp );
}

?>
Es gibt hier mehrer Varianten dies ist eine davon. ;)
Ich habe es jetzt nicht getestet, müsteaber stimmen.
mfg undefined

mazewei
31-10-2004, 18:34
Das ist ja wieder etwas ganz anderes wie in deiner ersten Frage.

Naja, nicht wirklich. Es ist halt das nächste Teilproblem, das erste habe ich gelöst. Ich kann für die Zeile

%Series=The museum visitor, Publication in museology: No. 3 (pp. 103-141)

einen regexp finden der die ,,matcht'', aber komischerweise hat diese Zeile keinen Zeilenumbruch am Ende. Ich wollte den aber benutzen um dahinter etwas (%Address) einzufügen, dabei muß die Zeile unverändert erhalten bleiben. Das ist mein Problem, wie kann ich sagen, bitte am Ende einer Zeile ohne \n etwas einfügen und den Rest unverändert lassen?

Ich verstehe das auch nicht so richtig, im Editor (vim) ist eindeutig ein Zeilenumbruch dahinter, wenn ich aber an meinen regexp ein [\n] anhänge, dann findet er die Zeile nicht mehr:mad:

Grüße Matthias

undefined
31-10-2004, 20:10
Das liet dann wohl eher an deinen Speicher Einstellungen. Auf diese Weise habe ich mir schon einige Male Makefiles zerschossen :D
Verwende mal $ oder \81 zum ermitteln des Zeilenumbruchs.