na dann lass uns auch teilhaben![]()
Hallo,
dachte das hätte ich getan.
Habe die lösung allerdings bereits gefunden.Ich möchte vollgendes erreichen:
In einer beliebigen Zeile soll die Zeichenfolge pDhMc gesucht werden, von dort aus soll nach links jedes Zeichen welches nicht ein Leerzeichen, ein Komma, ein Rufzeichen oder ein Minus ist bis max. zum Zeilenanfang ebenfalls gesucht werden.
Vielen Dank
Gruß
Svenfranzisko
na dann lass uns auch teilhaben![]()
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
k, dann stell ich hiermit mal 2 aufgaben:Zitat von webmichl
1. Ich möchte prüfen, ob eine beliebige IP in einer bestimmten IP Range vorhanden ist. Soll heißen, ich will wissen, ob z.b. eine IP in der IP Range:
192.0-255.0-255.1 liegt, oder nicht
2. Ich möchte mit einem eizigen preg_replace() BB-Codes für [i ]...[/i ], [u ] ...[/u ] und [b ]...[/b ] (leerzeichen mache ich hier, da die dinger sonst wieder vom forum gematcht werden) in html code bringen. dabei sollte beachtet werden, dass ungeschlossene bbcodes nicht ersetzt werden dürfen, und dass der regexp nicht gierig ist. beispiel zu letzterem:
[b ]...[/b ] skksk[b ]kasd[/b ]
soll zu
... skksb kasd
und nicht zu
... skksb kasd
werden![]()
och leute, kommt schon ...
Hallo, (ich bin neu hier)
ich befasse mich nun seit kurzem mit Regulären Ausdrücken und habe folgendes Problem:
Ich möchte Zahlen -- genauer: die Hits auf eine Homepage -- aus einer HTML-Datei matchen.
Die HTML-Datei sieht folgendermaßen aus:
Den Wert 35,738 möchte ich matchen und später in 35.738 umwandeln und in eine Textdatei schreiben.Code:</TR> <TR BGCOLOR="FFFFFF"> <TD ALIGN ="LEFT" > <FONT SIZE=2 FACE="Arial" COLOR="000000"><B>Anzahl der Hits auf Homepage</B></FONT></TD> <TD ALIGN ="LEFT" > <FONT SIZE=2 FACE="Arial" COLOR="000000">35,738</FONT></TD> </TR>
Das ist aber erst mal Nebensache, es geht vorerst nur um den Match.
Die Hits variieren natürlich und haben folgende Form:
- 0 Hits
- 11 Hits
- 222 Hits
- 3,333 Hits
- 44,444 Hits
- 555,555 Hits
- 6,666,666 Hits
Ich hab folgendes festgestellt:
- der kleinste Wert ist 0
- bei mehr als drei Ziffern wird ein Komma als 1.000er-Trennzeichen gesetzt
- die Zahl kann endlich groß werden
- aufgrund der HTML-Tags ist der Wert immer von > und < umschlossen, was die Suche erleichtert
Mein Ansatz ist folgender:
Die letzten drei Stellen des Wertes. Kann Werte von 0 (muss mindestens vorkommen) bis 999 (maximal) annehmen.Code:[:digit:]{1,2,3}+
Wie baue ich das Komma/Trennzeichen mit ein? Und dann darf ja der Wert immer um jemals 1-3 Ziffern erweitert werden, unter Beachtung der Trennung der Blöcke durch ein Komma.
Neuer Ansatz:
Code:[,?[:digit:]{1,2,3}]*
Geändert von Digel (20.06.2006 um 13:03 Uhr)
Hallo Digel,
wie wäre es mit sowas hier:
\>[^\d,]*([\d,]+)[^\d,]*\<
Gruß
Meine eben verbesserte Version sieht folgendermaßen aus:Zitat von Barney
Wenn ich deinen RegEx richtig verstehe -- habe ihn mit Visual REGEX 3.0 gestestet --, dann legt er die Zahl in ein Subpattern von Hits ab, oder?Code:>[,?[:digit:]{1,2,3}]*<
Jop, richtig.Zitat von Digel
Gruß
Hmmm, weiß nicht, ob ich das so gebrauchen kann, da es im (beigefügten) HTML-Code ja anders ist. Da steht Anzahl der Hits auf Homepage ja weit vor dem Wert. Das andere war ja nur zur Verdeutlichung der Formatierung.Zitat von Barney
Na ja, ich probier mal weiter ...
Hmmm, mit
matche ich wie folgt:Code:\>([,?[:digit:]{1,2,3}]*)\<
Die Tag-Zeichen in rot, der Wert in blau.Code:<TD ALIGN ="LEFT" > <FONT SIZE=2 FACE="Arial" COLOR="000000"><B>Anzahl der Hits auf Homepage</B></FONT></TD> <TD ALIGN ="LEFT" > <FONT SIZE=2 FACE="Arial" COLOR="000000">35,738</FONT></TD>
Wenn ich das richtig sehe, ist der blaue Match ein Subpattern. Nun möchte ich folgendes erreichen. Er soll nur auf -- in diesem Fall -- die 35,738 matchen, wenn davor Anzahl der Hits auf Homepage steht. Dann soll er Anzahl der Hits auf Homepage: 35,738 in hits.txt schreiben.
Damit komme ich noch nicht zurecht.![]()
Problem für mich also: Wie verkette -- verknüpfe/verbinde? -- ich
mitCode:/Anzahl der Hits auf Homepage/
?Code:>([,?[:digit:]{1,2,3}]*)\<
Realisiere ich das mit einem Positive Lookahead, dass vor dem Wert Anzahl der Hits auf Homepage stehen muss?
Folgender RegEx soll den Wert nur ausspucken, wenn die Zeichen > und < davor bzw. dahinter stehen.
Aber irgendwie funktioniert das nicht.Code:(?<=\>)([,?[:digit:]{1,2,3}]*)(?=\<)![]()
Wenn ich mit sed arbeite ...
Ich möchte einfach nur meine Matches in eine andere Datei schreiben. Zum Beispiel alle Zahlen aus einem Text.
/[:digit:]/
Und dann? Irgendwas mit "eingabe.txt > ausgabe.txt"?
Geändert von Digel (21.06.2006 um 18:23 Uhr)
Mein RegEx sieht jetzt so aus:
Ich möchte nun mithilfe von sed, dass das Muster durch z. B. Bla, bla, bla ersetzt wird.Code:[\d{1,3},?]*[[:digit:]]{1,3}(?=\<)|[[:digit:]]{1,3}(?=\<)
Funktioniert aber nicht.Code:s/[\d{1,3},?]*[[:digit:]]{1,3}(?=\<)|[[:digit:]]{1,3}(?=\<)/Bla, bla, bla/g
doppelpost.. sry
Dieseregulären AUsdrücke sind ja echt der Hit. In jedem Program was mit Stringmanipulation zu tun hat und wo es sinnvoll ist setze ich sie ein. Da ich nicht nur mit Blumen kommen möchte hier eine kleine Frage:
".*" Kann recht nützlich sein, keine frage. Aber manchmal ist es eben im Weg.
Ein Beispiel:
Mein String:
So ich würde jetzt gerne den Bereiche zwischen den "[" und "]" finden. Dazu benutze ich folgenden RegEx:Code:"<span class="editsection">[<a href="index.php/component/option,com_staticxt/&Itemid=28staticfile,~w~index.php/title,55/amp;action,edit/amp;section,5" title="Abschnitt bearbei">Bearbeiten</a>]</span>"
Leider sucht dieser Ausdruck bis zum letzten "]" den es im String gibt und nicht zum zu dem zuerst aufkommenden. Ich nehme an dies ist so weil ".*" auch für zwischendurch vorkommende "]" gilt. Ich will den String aber nur bis zum ersten "]" haben. wie gehe ich da am besten vor?Code:\[.*(\]{1})
Hi HeartTen,
zunächst mal preg_match lesen und verstehen. Als Suchmuster sollte einreichen.Code:"/[(.*)]/"
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Hmm, also eins erstmal vorweg: ich programmiere mit Java.
Der Reguläre Ausdruck
Findet meines wissens alles was:Code:/[(.*)]/
-Mit einem "/" beginnt und mit einem "/" endet.
-Dazwischen darf eins der Zeichen "." und "*" stehen.
Die eckigen Klammern geben doch an welches Zeichen auftreten darf.
Meine Anforderungen sind aber..
Finde einen String der:
-Mit "[" anfängt und mit dem ersten gefundenen "]" aufhört
Bei
dürfte er nur folgendes ausspucken:Code:blabla[b123]b666]bu
und nicht:Code:[b123]
Code:[b123]b666]
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)