Schrift
[thread]7900[/thread]

Zeichen in RegEx darf nicht zwischen <> stehen (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten
sid burn
 2006-04-18 19:37
#65020 #65020
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=Dubu,18.April.2006, 16:25]Es klingt zwar erstmal bestechend, alle paarweise stehenden spitzen Klammern zu suchen. Das geht aber schief, wenn du spitze Klammern dazwischen hast, die nicht zur HTML-Syntax gehören, z.B. in JavaScript (if (x > y) {...) oder alt-Attributen (<img src="/img/next.gif" alt=">>">).
HTML::Parser macht's besser.[/quote]
Ob nun Java Script, PHP oder auch Perl Code in der Datei vorkommt weiß ich ja nicht, wenn dies der Fall ist muss man es defintiv anpassen.

Ansonsten das andere probleme mit dem Größer Gleich Zeichen innerhalb von Anführungszeichen, dass ist sicherlich etwas was zu einem Problem führen könnte. Ich habe die regex nun angepasst das wenn innerhalb von Spitzen klammern Anführungszeichen vorkommen, dass alles was zwischen den Anführungszeichen vorkommt, ignoriert wird.

Allerdings weiß ich gerade gar nicht wie man innerhalb von HTML ein Anführungszeichen schreibt? Wird das einfach mit einem Backslash escaped? Wenn ja muss ich das auch noch einbauen.

Ob nun JavaScript, PHP oder sonstiges in der Datei vorkommt, muss der Thread ersteller Wissen, oder sagen.


Ansonsten ist das Konstrukt ja relativ leicht erweiterbar. Bei PHP kann man einfach nach den Anfangs und den Endtags suchen, und alles was dazwischen ist ignorieren. Oder aber wenn Ausgaben, von PHP auch überprüft werden sollen, dann überprüft man nur die String innerhalb des PHP Blockes und fügt den Zahlen das font Tag hinzu.

Letztes könnte sicherlich wieder "etwas" komplizierter werden. Allerdings weiß man ja nicht genau was in dieser "textdatei" noch alles zu finden ist.


Unter umständen kann man ja vielleicht die Suche nach den zahlen auch anders Stellen. z.B. die zahlen die nur in einer tabelle ausgegeben werden. Oder nur die innerhalb von Strings auftreten (Bei JS, PHP ...). Vielleicht wird die Ausgabe einer zahl ja auch immer mit bestimmten HTML tags eingeleitet etc. Solange man nichts genaueres über die Original Datei weiß, kann man auch nicht alle Fälle abdecken.

Z.B. werden auch zahlen innerhlab von Kommentare editiert etc.\n\n

<!--EDIT|sid burn|1145375297-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Dubu
 2006-04-18 19:55
#65021 #65021
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=sid burn,18.04.2006, 17:37]Ob nun Java Script, PHP oder auch Perl Code in der Datei vorkommt weiß ich ja nicht, wenn dies der Fall ist muss man es defintiv anpassen.
[/quote]
Das eben ist das Problem deines Codes. Eigentlich sollte die Information reichen, dass es eine (valide) HTML-Datei ist, evtl. noch die HTML-/XHTML-Version, denn dann ist die Syntax definiert.

Quote
Ansonsten das andere probleme mit dem Größer Gleich Zeichen innerhalb von Anführungszeichen, dass ist sicherlich etwas was zu einem Problem führen könnte. Ich habe die regex nun angepasst das wenn innerhalb von Spitzen klammern Anführungszeichen vorkommen, dass alles was zwischen den Anführungszeichen vorkommt, ignoriert wird.

Was ist mit einfachen Anführungszeichen? Was ist mit HTML-Kommentaren? "<!-- Nur für x > y -->"
Du siehst, wir können hier Hase und Igel spielen: Ich beschreibe eine evtl. sehr abstruse, aber gültige Syntaxvariante, du verbesserst deinen Code, ich denke mir die nächste Konstruktion aus ... Am Ende landen wir dabei, dass du HTML::Parser nachimplementierst.

Quote
Allerdings weiß ich gerade gar nicht wie man innerhalb von HTML ein Anführungszeichen schreibt? Wird das einfach mit einem Backslash escaped?

Nö, wozu? Anführungszeichen sind AFAIK erlaubte Textzeichen. Ansonsten kann man auch &quot; schreiben (für die doppelten), z.B. in Attributen.

Quote
Wenn ja muss ich das auch noch einbauen.

Ob nun JavaScript, PHP oder sonstiges in der Datei vorkommt, muss der Thread ersteller Wissen, oder sagen.

Wie gesagt, eigentlich sollte die Information reichen, dass es HTML (3.2/4.x/wasweißich) ist.
renee
 2006-04-18 20:54
#65022 #65022
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich denke auch, dass ein Programm mit möglichst wenig Regulären Ausdrücken am besten lesbar für Einsteiger ist. Warum sollte ich mir auch die Arbeit machen, alles selbst zu programmieren, wenn es schon jemand für mich getan hat.

Ich gebe zu, dass man sich erstmal in CPAN:HTML::Parser einarbeiten muss, aber es ist wirklich ein nützlicher Helfer!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sid burn
 2006-04-18 22:23
#65023 #65023
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
Das eben ist das Problem deines Codes. Eigentlich sollte die Information reichen, dass es eine (valide) HTML-Datei ist, evtl. noch die HTML-/XHTML-Version, denn dann ist die Syntax definiert.

Naja, diese Informationen kann ich aber nirgendswo finden. Auser die Angabe das es eine "textdatei" ist. Was doch etwas oberflächlich ist.

Quote
Was ist mit einfachen Anführungszeichen? Was ist mit HTML-Kommentaren? "<!-- Nur für x > y -->"
Du siehst, wir können hier Hase und Igel spielen: Ich beschreibe eine evtl. sehr abstruse, aber gültige Syntaxvariante, du verbesserst deinen Code, ich denke mir die nächste Konstruktion aus ... Am Ende landen wir dabei, dass du HTML::Parser nachimplementierst.

Ich sagte ja bereits das auch Kommentare Editiert werden, und das man sich zig andere Sachen ausdenken kann womit es letztendlich nicht klappt.

Und Html::parser nachprogrammieren möchte ich nicht. Die Angabe ist aber letztendlich das es eine textdatei ist die schon HTML Tags enthält. Es kann also genauso ein Java, C++ eine Latex File oder sonst irgendetwas sein.

Das ist ein Quick&Dirty Hack für die Aufgabe, vielleicht reicht diese Möglichkeit aus, vielleicht auch nicht. Was von beiden zutrifft muss der Thread ersteller selber wissen.

Ich muss aber auch sagen das ich HTML::Parser nicht kenne, und deren Möglichkeit nicht kenne, Textdateien auser HTML Dateien zu bearbeiten. Und ich weiß nicht was bei dem Modul als HTML gesehen wird. JavaScrpt oder embedded PHP gehört Meiner Meinung nach nicht zu HTML.

Quote
Nö, wozu? Anführungszeichen sind AFAIK erlaubte Textzeichen. Ansonsten kann man auch &quot; schreiben (für die doppelten), z.B. in Attributen

Ich meinte Nicht Anführungszeichen als Normalen Text, sondern wenn man ein Anführungsezeichen innerhalb eines String Schreiben möchte.

z.b. den String: "Hallo, Welt", und wie inenrhlab eines Strings Anführungszeichen escaped werden. Sonst wäre das nächste Anführungszeichen ja sofort der nächste Begrenzer.

<img src="/img/next.gif" alt=""Hallo, Welt"">

Quote
Wie gesagt, eigentlich sollte die Information reichen, dass es HTML (3.2/4.x/wasweißich) ist.

Ja, wenn so etwas angegeben ist, würde es reichen.\n\n

<!--EDIT|sid burn|1145384724-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Dubu
 2006-04-19 01:57
#65024 #65024
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=sid burn,18.04.2006, 20:23]
Quote
Das eben ist das Problem deines Codes. Eigentlich sollte die Information reichen, dass es eine (valide) HTML-Datei ist, evtl. noch die HTML-/XHTML-Version, denn dann ist die Syntax definiert.

Naja, diese Informationen kann ich aber nirgendswo finden. Auser die Angabe das es eine "textdatei" ist. Was doch etwas oberflächlich ist.
[/quote]
Stimmt, du hast recht. Das macht es natürlich schwieriger.

Quote
Und Html::parser nachprogrammieren möchte ich nicht. Die Angabe ist aber letztendlich das es eine textdatei ist die schon HTML Tags enthält. Es kann also genauso ein Java, C++ eine Latex File oder sonst irgendetwas sein.

Damit ist auch nicht klar, ob HTML::Parser überhaupt anwendbar ist.

Quote
Das ist ein Quick&Dirty Hack für die Aufgabe, vielleicht reicht diese Möglichkeit aus, vielleicht auch nicht. Was von beiden zutrifft muss der Thread ersteller selber wissen.

Da hast du recht. Sollte es sich tatsächlich um HTML handeln, dann ist HTML::Parser die beste Lösung, ansonsten muss das Problem genauer spezifiziert werden.

Quote
Ich muss aber auch sagen das ich HTML::Parser nicht kenne, und deren Möglichkeit nicht kenne, Textdateien auser HTML Dateien zu bearbeiten. Und ich weiß nicht was bei dem Modul als HTML gesehen wird. JavaScrpt oder embedded PHP gehört Meiner Meinung nach nicht zu HTML.

Nein, HTML::Parser erwartet schon validen HTML- oder XHTML-Code.


Quote
Ich meinte Nicht Anführungszeichen als Normalen Text, sondern wenn man ein Anführungsezeichen innerhalb eines String Schreiben möchte.

Als Wert eines Attributes? Da kann man &quot; benutzen. Oder doppelte in einfachen Anführungszeichen.

Quote
z.b. den String: "Hallo, Welt", und wie inenrhlab eines Strings Anführungszeichen escaped werden. Sonst wäre das nächste Anführungszeichen ja sofort der nächste Begrenzer.

<img src="/img/next.gif" alt=""Hallo, Welt"">

<img src="/img/next.gif alt="&quot;Hallo, Welt&quot;">
oder
<img src="/img/next.gif alt='"Hallo, Welt"'>
Crian
 2006-04-19 11:28
#65025 #65025
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=Matze,18.04.2006, 11:43]Es ist schon sehr nah dran, allerdings verstehe ih nicht genau was dies: [^>]*(?:<|$) bewirkt.
Und bei folgender RegEx:
Code: (dl )
$data =~ s/(\d+)([^>]*(?:<|$))/<font color=\"#ff0000\">$1<\/font>$2/


Und folgender Testdatei:
Code: (dl )
1
2
3
4
5
6
7
<font color="#000000"><pre>
<br>"Hallo"
<br>1234<br>214214<br>346<br>
<br>
<br>();
<br>("Test! 2134",12421<br>
);</pre></font>


Dann wird bei mir leider die letzte Zahl(12421) nicht rot gefärbt.[/quote]
Das kommt davon, wenn ich nicht das schreibe was ich denke...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
C:\Daten\perl>perl
$data = qq{<font color="#000000"><pre>
<br>"Hallo"
<br>1234<br>214214<br>346<br>
<br>
<br>();
<br>("Test! 2134",12421<br>
);</pre></font>};
$data =~ s~(\d+)(?=[^>]*(?:<|$))~###$1###~g;
print $data;
^Z
<font color="#000000"><pre>
<br>"Hallo"
<br>###1234###<br>###214214###<br>###346###<br>
<br>
<br>();
<br>("Test! ###2134###",###12421###<br>
);</pre></font>


Also ist

Code: (dl )
(\d+)(?=[^>]*(?:<|$))


das was du brauchst.\n\n

<!--EDIT|Crian|1145431770-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Matze
 2006-04-20 14:07
#65026 #65026
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Crian,19.04.2006, 09:28]...
Also ist

Code: (dl )
(\d+)(?=[^>]*(?:<|$))


das was du brauchst.[/quote]
Stimmt, damit funktioniert es, aber ich glaube, ich werde jetzt HTML::Parser benutzen. '<' und '>' können einfach zu oft in einer Datei benutzt werden.

Danke mal an alle!

MfG. Matze
Mit freundlichen Grüßen: Matze
Dubu
 2006-04-20 14:44
#65027 #65027
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Sind es denn jetzt HTML-Dateien?
Matze
 2006-04-20 15:25
#65028 #65028
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Nein, eigentlich nicht, aber es gibt ja auch schon Probleme wenn ich nicht nur Zahlen rot färben,
sondern auch andere Elemente wie ein bestimmtes Wort grün färben möchte.

Am Ende soll es eine HTML Datei sein.

Und nach dem rot färben, gibt es dann auch schon <font>-Tags.
Wenn dann das Wort das grün werden soll 'color' heißt, habe ich ein Problem.

Allerdings merke ich gerade das es mit HTML::Parser auch nicht so ohne weiteres geht, wenn man mehrere Elemente färben möchte.
Ich werde mir mal den eg/ Ordner runterladen, vielleicht ist ein gutes Beispiel für genau das was ich brauche mit dabei.

MfG. Matze
Mit freundlichen Grüßen: Matze
Matze
 2006-04-20 15:37
#65029 #65029
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Habe gerade mal bei Google gesucht, und bi auf einen Wiki Artikel gestoßen: Wiki:FaqBenutzungModuleHTMLParser

Ich glaube ich sollte mal öfter erst im Wiki suchen ;)

Falls es klappt, oder falls nicht, melde ich mich nochmal mit meinem Versuch.

MfG. Matze
Mit freundlichen Grüßen: Matze
<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten



View all threads created 2006-04-18 11:40.