PHP simples stringmatching ?

tobomator

Well-known member
ID: 129556
L
28 Februar 2010
575
23
Hallo, nachdem ichmir gestern Nachmittag mal wieder was angetan habe (bsl coden) ist es mir nicht leicht gefallen etwas zu finden, was meiner Lösung nahe kommt.

Wie wir alle wissen, gibt es HTML Tag mit öffnendem und schließendem Tag, bis auf "br".
Ich hatte mal irgendwann etwas im Netz gefunden, wo mit einem preg_match[_all] Befehl und passendem RE mir den öffnenden und schließenden Tag gefunden hatte. Egal was ich einsetzte, er fand es und ich könnte mit dem Inhalt dazwischen machen was ich wollte...

Kann mir einer weiterhelfen, mit welchen Schlagwörtern ich da suchen könnte ? Mir fällt absolut nichts ein im Augenblick


Nachtrag:
strip_tags ist es nicht.
Ich will nicht die Tags entfernen, sondern festellen, wie oft ein tag vorkommt. Wäre eigentlich preg_match_all() das richtige.
Vielleicht muss ich nur ein wenig mehr damit experimentieren
 
Zuletzt bearbeitet:
xpath ?
So richtig kann ich da keine Zuordnung erkennen, für meinen Fall.
Es ist wirklich nicht so schwer, aber ich muss ich erst wieder in RE einarbeiten.

- alles was keine Buchstaben, zahlen und whitespaces sind, sollte oder muss escaped werden ?
- alles was in () ist in der Reihenfolge mit $X abzufragen

hab ich was wichtiges vergessen ?
 
Nun ich habe schon nach dem ice-braker mir das vorgeschlagen hat, versucht zu verstehen, wozu ich es brauachen sollte.
Ich habe nix mit XML zu tun, weder noch sind die Seiten in XML geschrieben, die ich auszuwerten habe.
Ich brauch wohl ein wenig länger, oder mal ne Seite, wo Beispiele sind, die ich verstehe... :-?

Nachtrag:
Ich habe gerade noch mal ein wenig im Web gesucht. Habe was gefunden, wo ich ein wenig Hilfe wegen RE hab und nun auch ein wenig mehr bescheid weiß, warum es vll bei mir nicht so klappte.
Dinge die ich zu beachten habe und so ...

man lernt halt nie aus :) das ist das schöne am leben
es bleibt immer spannend, auch wenn man "ein" Problem gelöst hat :)

@theHacker und ice-breaker:
ich mag es nicht, was fertiges zu nutzen, weil ich die materie gern auch selbst verinnerlichen mag. Und wenn's ein simpler PREG es auch macht, was sicher auch nur in Xpath steckt, dann benötige ich nicht den gesamten Overhead des Xpath's drum herum, sondern einfach nur das wie, damit es auch so klappt...
Aber ich habs letztendlich verstanden, auch Xpath wäre hier was !
Besser spät als nie
 
Zuletzt bearbeitet:
Ich habe nix mit XML zu tun, weder noch sind die Seiten in XML geschrieben, die ich auszuwerten habe.
PHP:
$html = new DOMDocument();
$html->loadHtmlFile('https://www.klamm.de');
$xpath = new DOMXPath($html);
foreach($xpath->query('//a') as $a) {
	var_dump($a->getAttribute('href'));
}
und Klamm.de ist nicht mit XML beschrieben...


ich mag es nicht, was fertiges zu nutzen, weil ich die materie gern auch selbst verinnerlichen mag.
dann bau erst deine eigene Programmiersprache.
Tut mir leid, aber das ist ein absolut schwachsinniges Argument, welches ich dauernd höre. Man baut scheinbar lieber eckige Räder statt das fertige runde Rand zu nutzen...
Vor allem ist es ja auch so schwer zu verstehen, wie man HTML in eine XML-Struktur packen kann, die beiden sind sich ja auch sowas von fremd.
Und wie so ein Xpath-Query dann auf einer XML-Struktur sucht ist auch extrem kompliziert....
Aber im Gegenzug dann SQL-Querys nutzen ohne zu wissen, wie sie funktionieren :roll:

Und wenn's ein simpler PREG es auch macht, was sicher auch nur in Xpath steckt
Ein regulärer Ausdruck ist viel fehleranfälliger, und wird von xpath nicht genutzt. Da wird direkt die XML-Struktur untersucht.
 
warum sollte man html erst nach xml konvertieren, nur damit es richtig geparst wird...
warum sollte ein RE fehleranfällig sein?
Es ist nur schwierig, alle Fälle mit einem solchen etwas abzudecken.
Aber es ist nicht unmöglich. Und wer nicht gern mit RE arbeitet, der greift halt lieber zu Xpath ;) [Irony]...
Ich möchte einfach nochmal in RE reinschnuppern und bsl intensivieren.
Natürlich könnte ich simpel nen Textmatching algorithmus hinschmeißen, der sicher auch auf den Quellcode der google startseite matched, wo gerade nicht mal HMTL konform ausgeliefert wird ( im iframe gibts nodes ohne " nach dem = ) und das erklär mal einem RE, das es mal mit " und mal ohne sein soll ;)
Nun ja es geht halt nicht immer gleich alles, so wie man es sich wünscht
Aber wie xapth auf das reagiert, würde mich sogar interessieren.

Vll sollte ich vorher mal parsen, ob es irgendwo text=text innerhalb <text></text> gibt und daraus text="text" machen ...
 
warum sollte man html erst nach xml konvertieren, nur damit es richtig geparst wird...
nicht konvertieren!
HTML wird geparst - mit allen Fehlern - und in einer XML-Struktur gespeichert.

warum sollte ein RE fehleranfällig sein?
weil nicht valides HTML eine höllische Arbeit zum Parsen, frag mal die Browserhersteller...
Sowas will man nicht selbst machen, womit du für reguläre Ausdrücke auch erstmal alles durch TidyHTML jagen müsstest.


im iframe gibts nodes ohne " nach dem = ) und das erklär mal einem RE, das es mal mit " und mal ohne sein soll ;)
das IST valide nach dem HTML5-Standard, die Anführungszeichen sind nun optional.

Aber wie xapth auf das reagiert, würde mich sogar interessieren.
wie xpath auf nicht valides HTML ist irrelevant, xpath bekommt nur XML vorgesetzt, du müsstest stattdessen fragen wie DomDocument invalides HTML parst, aber das ist sicherlich irgendwo definiert.
 
gut dann frag ich mal lieber so...
Wo bekomm ich denn ne Übersicht her, was in HTML5 alles depricated ist ?
oder zumindest nen Vergleich was hat sich wie geändert, nicht was ist neues an Elementen hinzugekommen!
 
warum sollte ein RE fehleranfällig sein?
Es ist nur schwierig, alle Fälle mit einem solchen etwas abzudecken.
Aber es ist nicht unmöglich. Und wer nicht gern mit RE arbeitet, der greift halt lieber zu Xpath ;) [Irony]...

Da HTML keine reguläre Sprache, sondern eine kontexfreie Sprache ist, kann sie auch nicht ordentlich durch reguläre Ausdrücke geparsed werden, denn die erkennen nur reguläre Sprachen. Und genau deshalb sind RE in dem Fall fehleranfällig und du wuerdest Jahre dran sitzen sämtliche Eingenheiten der Grammatik da unterzubringen. Nur um dann ein RegEx zu haben was immer noch nicht 100%ig funktioniert.

Einen sehr hübscher Beitrag zu dem Thema findet man hier als erste Antwort: https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
 
Wo bekomm ich denn ne Übersicht her, was in HTML5 alles depricated ist ?
wer sprach denn von deprecated? Niemand!
In HTML5 ist das snführungszeichenlose Attribut hinzugekommen.

nen Vergleich was hat sich wie geändert, nicht was ist neues an Elementen hinzugekommen!
Google bemühen? Man wird sicherlich in kürzestester Zeit einen Blogger finden, der die meisten Änderungen beschreibt. Eine vollständige Liste ist möglich, da HTML5 noch nicht final ist, sich somit täglich ändern kann und sich auch immer wieder Dinge ändern. Da muss man dann schon selbst die jeweils aktuellste Spezifikation lesen.
 
Gibts bei Xpath auch die Möglichkeit, den JS Teil unter die Lupe zu nehmen ?
Oder gibts da auch wieder was anderes für ?
Auch wenn es Google gibt (danke tleilax für die Erinnerung :ugly:), habe ich grad keine Zeit es zu benutzen.
Auch wenn es nicht schwer fallen sollte, nur ein paar worte einzutippen und zu suchen. ;)

Nachtrag:
firebug zähl ich mal nicht dazu ...
 
Gibts bei Xpath auch die Möglichkeit, den JS Teil unter die Lupe zu nehmen ?
XPath kennt kein "JS". XPath behandelt XML-Dokumente. Wenn da ein <script>-Tag drin is, is das für XPath genauso bedeutet, wie ein <foo>-Tag.

Lies doch mal den Wikipedia-Artikel, den ich schon neulich hier gepostet hab ;)
 
mit kennen meinte ich doch nur, ob er es auch verarbeiten kann.
Da scheinbar alles was in einem Tag steht, verarbeitet wird, nur noch ne Frage...

Ist Xpath schon teil von Apache oder muss ich die Bibliothek selbst integrieren ?
Wahrscheinlich ja, weil man es bei sf.net ja runterladen sollte
 
also, was man auf diese Frage antworten soll, ist mir echt ein Rätsel :roll:

  1. ist es vollkommen egal ob xpath "bei apache dabei" ist, weil du es für php benötigst
  2. haben sf und apache mal gar nichts miteinander zu tun, aber rein gar nichts
  3. ist der begriff apache in dem zusammenhang unterdefiniert, deine frage könnte genausp bedeuten ob xpath ein apache projekt ist
  4. wie wäre es einfach mal in die phpinfo zu sehen? :evil:
 
Ist Xpath schon teil von Apache oder muss ich die Bibliothek selbst integrieren ?
XPath ist eine Sprache, keine Implementierung. (@ice-breaker: ging doch recht einfach die Antwort :biggrin:) Aber auch das steht schon in dem (bereits zum dritten Mal) besagten Wikipedia-Artikel.

Bitte lies ihn! :pray: