RegEx, Problem mit Eingabe und Verhalten

Hier finden YaCy User Hilfe wenn was nicht funktioniert oder anders funktioniert als man dachte. Bei offensichtlichen Fehlern diese bitte gleich in die Bugs (http://bugs.yacy.net) eintragen.
Forumsregeln
In diesem Forum geht es um Benutzungsprobleme und Anfragen für Hilfe. Wird dabei ein Bug identifiziert, wird der thread zur Bearbeitung in die Bug-Sektion verschoben. Wer hier also einen Thread eingestellt hat und ihn vermisst, wird ihn sicherlich in der Bug-Sektion wiederfinden.

RegEx, Problem mit Eingabe und Verhalten

Beitragvon shni » Fr Apr 07, 2017 10:44 am

Hi,

ich versuche gerade, alle Crawls mittels Blacklist einzuschränken. Dabei stoße ich auf diverse Probleme bei der Eingabe des Regex.

Folgender Ausdruck soll in die Blacklist: ^https?://(www\.)?[^\.]+\.[^\./]+(/[^/]){0,2}/?$

Wenn man so etwas speichern möchte, wird es von YaCy komplett geschreddert. Ich habe es am Ende per Hand in die Blacklist eingetragen, selbst dann verwandelt blacklist_p.html alle Plus (+) in Leerzeichen. Das mag ein optisches Problem sein, aber wenn man dann dasselbe speichern möchte, via blacklist_p.html, dann wird daraus:

.*.*/.*.*^https?://(www\.)?[^\.] \.[^\./] (/[^/]){0,2}/?$.*/.*.*

Da gibt es offensichtlich ein totales Missverständnis des * und + Quantifiers. Ähnliche Probleme gab es auch zum Beispiel beim Löschen von Index-Einträgen. Auch da lässt sich nicht mit echten regulären Ausdrücken arbeiten. Gibt es vielleicht eine Best-Practice, wann man * als Wildcard und wann als Regex-Quantifier nimmt?

Grüße
shni
 
Beiträge: 10
Registriert: Mo Apr 03, 2017 2:12 pm

Re: RegEx, Problem mit Eingabe und Verhalten

Beitragvon luc » Do Mai 04, 2017 7:02 pm

Hello shni,
sorry to answer in English, but I hope this can still be useful. With your example I identified four issues, and could fix three of them :
- bad HTML rendering of '+' characters when there is a '?' before : fixed
- wrongly added ".*.*/.*" because expecting at least one wildcard '*' chararacter without considering '?' and '+' chars which are also wildcards : fixed
- bad identification of the URL protocol part when the regex starts with '^' or when the protocol part contains a '?' : fixed (note : by the way, the protocol is then ignored by the BlackList engine which only consider the domains names and paths)
- bad identification of the host (domain name) part when it contains the slash '/' character in a characters class ("[^\./]" in your example) : not fixed. Internally YaCy Blacklist engine splits the blacklist entries between host and path parts, relying on the first '/' character to identify the end of the host part. So your example should be modified only a little bit to keep working : from "^https?://(www\.)?[^\.]+\.[^\./]+(/[^/]){0,2}/?$" to "(www\.)?[^\.]+\.[^\.]+/([^/]){0,2}/?$"

The fixes are now available in the latest sources on GitHub. If you have some time to test and still encounter issues don't hesitate to report!
luc
 
Beiträge: 285
Registriert: Mi Aug 26, 2015 1:04 am


Zurück zu Fragen und Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast