Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

php string manipulationen

Empfohlene Antworten

Veröffentlicht


<tr>
<td class=navheader width=150px>Vorname:</td><td>Andreas</td>
</tr>
<tr>
<td class=navheader width=150px>Geburtsdatum:</td><td>08.08.08</td>
</tr>
<tr>
<td class=navheader width=150px>Beruf:</td><td>Fachinformatiker</td>
</tr>
[/PHP]

ich möchte diesen string so ersetzen damit er wie folgt aussieht

[PHP]
<tr>
<td class=navheader width=150px>Vorname:</td><td><input type="text" value="Andreas"></td>
</tr>
<tr>
<td class=navheader width=150px>Geburtsdatum:</td><td><input type="text" value="08.08.08"></td>
</tr>
<tr>
<td class=navheader width=150px>Beruf:</td><td><input type="text" value="Fachinformatiker"></td>
</tr>

ich weiss nicht wie ich das anstellen soll damit das dann automatisiert durchläuft....

also das sind nicht nur diese 3 felder. ist nur ein ausschnitt. könnt ihr mir nen denkanstoß bzw ne lösung geben?!

Gruß

kills

Also wenn die Struktur immer so ist, kannst du das so realisieren.


<table>

<?

$text="<tr>

               <td class=navheader width=150px>Vorname:</td><td>Andreas</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Geburtsdatum:</td><td>08.08.08</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Beruf:</td><td>Fachinformatiker</td>

            </tr>";




$pattern="#(^|\s{1})<td class=navheader width=150px\>([^\s<>]+)</td><td>([^\s<>]+)</td>\r\n#sm";

$replacement="\\1<td class\=navheader width=150px\>\\2</td><td><input type=\"text\" value=\"\\3\"></td>\r\n";


$text=preg_replace($pattern,$replacement,$text);

echo $text;

?>

</table>

Und übrigens Danke für die Übungsaufgabe. Langsam fange ich an zu begreifen, wie man so nen Pattern aufbaut. Fehlt nur die Übung.

ich werds ma versuche danke

Original geschrieben von jomama

Und übrigens Danke für die Übungsaufgabe. Langsam fange ich an zu begreifen, wie man so nen Pattern aufbaut. Fehlt nur die Übung.

immer wieder gerne :)

nun möchte ich auch noch in einer textdatei die z.b. 5. Zeile auslesen.

wie das? idee?

Hi,

entweder mit der Funktion file() und dann aufs Array zugreifen. http://de2.php.net/manual/de/print/function.file.php

oder bei großen Dateien die Daten zeilenweise einlesen und die gewünschte Zeile "herauspicken". ;)

Gruß Jaraz

danke nochmal euch beiden.

ich hab jetzt mein Formular erweitert aber nun funktioniert die preg_replace nicht mehr überall.

könnte es mir jemand so anpassen damits wieder funktioniert. ich blick da aktuell noch nicht so durch.


         <table bgcolor=#ffffff width=100% height=100%>

            <tr>

               <td class=navheader width=150px>Nachname:</td><td>Staab</td><td rowspan='9' align='right'><img src='./seiten/02Mannschaften/011. Mannschaft/01Kader/01Tor Staab Andreas/bild.jpg' alt=' Andreas Staab'></td>

            </tr>

            <tr>

               <td class=navheader width=150px>Vorname:</td><td>Andreas</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Geburtsdatum:</td><td>08.08.08</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Beruf:</td><td>Fachinformatiker</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Familienstand:</td><td>Ledit</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Position:</td><td>Tor</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Im Verein seit:</td><td>09.09.09</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Größter sportlicher Erfolg:</td><td>Gewunne</td>

            </tr>

            <tr>

               <td class=navheader width=150px>Sportliches Vorbild:</td><td>Markus Staab </td>

            </tr>

         </table>

[/code]

[PHP]
// aktueller Code:
$pattern="#(^|\s{1})<td class=navheader width=150px\>([^\s<>]+)</td><td>([^\s<>]+)</td>\r\n#sm";
$replacement="\\1<td class\=navheader width=150px\>\\2</td><td><input type=\"text\" value=\"\\3\"></td>\r\n";

$text=preg_replace($pattern,$replacement,$text);
[/PHP]


// aktueller Code:

$pattern="#(^|\s{1})<td class=navheader width=150px\>([^[b]\s[/b]<>]+)</td><td>([^\s<>]+)</td>\r\n#sm";

$replacement="\\1<td class\=navheader width=150px\>\\2</td><td><input type=\"text\" value=\"\\3\"></td>\r\n";


$text=preg_replace($pattern,$replacement,$text);

Ich denke, es müsste reichen, wenn du das markierte rauslöschst. \s kennzeichnet einen "Whitespace". Ich denke, es liegt an den Leerzeichen. Probiers mal aus und sag, obs funktioniert hat.

Hab den Pattern übrigens mit den Angaben von www.dclp-faq.de erstellt. Kannst du dir ja mal anschauen, ist äusserst nützlich.

nochmals vielen danke für die antwort.

es geht jetzt bei mehr feldern als zuvor aber immer noch nicht bei allen.

beim feld "Nachname" und "Sportliches Vorbild" gehts noch nicht.

Gruß

kills

Hmm, beim einen stimmt die Struktur nicht mit den anderen überein. Das kann nicht funktionieren.

Beim anderen stört die Klammer beim Smilie, denk ich. Ich probier mal was aus.

ich habs ma so umgebaut.

leider hat ich jetzt ein paar fehlerchen drinne :)


$sPattern = "(^|[\s]{1,1})<td class=navheader(.*)>([^<>]+)</td><td>([^<>]+)</td>";
$sReplacement = "\\1<td class=navheader \\2>\\3</td><td><input type=\"text\" value=\"\\4\" name=\"playerdatafields[\"\\4\"]\"></td>";
[/PHP]

PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 196 PHP Warning: Unknown modifier '<' in C:\wwwroot\~dpd\cgi-bin\sve\functions.php on line 202


//Replacement

$pattern="#(^|\s{1})<td class=navheader width=150px\>([^<>]+)</td><td>([^<>]+)</td>#sm";

$replacement="\\1<td class\=navheader width=150px\>\\2</td><td><input type=\"text\" value=\"\\3\"></td>\r\n";

$text=preg_replace($pattern,$replacement,$text);

So Passts. In der ersten Klammer stand noch ein \s, heisst, er hat nach Leerzeichen geprüft, deshalb wurden die unteren beiden angezeigt. Ausserdem bin ich zuerst davon ausgegangen, das alle Zeilen ein \r\n am Ende haben, weil eine neue Zeile anfängt, da das aber beim ersten nicht der Fall ist, musst ichs rauslöschen, und siehe da, es funzt.

:uli

(.*)

Das hier aus deinem Code heisst übrigens beliebige Anzahl Zeichen, darum bricht er bei < nicht ab, sondern liesst bis zum Ende der Zeile. Sowas musst du mit ([^<>])

machen. [] umschliest eine Zeichenmenge, ^ verneint die Zeichenmenge, d.h. er sucht alle Zeichen ausser < und >. Wenn du direkt nach Sonderzeichen wie einer Klammer suchst, musst du die mit Backslash kennzeichnen Viel Spaß noch beim Basteln.

hi danke nochmal für deine hilfe.

ich habs übrigens selbst mittlerweile auch schon hinbekommen :)


$sPattern = "/<td class=navheader(.*)>([^<>]+):<\/td><td>([^<>]+)<\/td>/";
$sReplacement = "<td class=navheader $1>$2</td><td><input type=\"text\" value=\"$3\" name=\"playerdatafields[\"$2\"]\"></td>";

$sRow = preg_replace( $sPattern, $sReplacement, $sRow);

[/PHP]

btw: das mit den reg expr. rock voll :)

macht voll bock :cool:

PS:

hab mir eben auf die schnellen nen reg expr. editor gebastelt. wenn du interesse hast kannste ihn auch haben (php)

Original geschrieben von jomama

Als ausgebildeter Fachinformatiker kann ich natürlich jedes Tool brauchen.

Du kannst den Code hier posten oder an holladrio@alpenjodel.de schicken. THX!

is schon raus :)

Als auszubildenter FiSi bin ich auch auf alles stolz was ich programmiert hab ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.