Visualizzazione risultati 1 fino 1 di 1

Discussione: passare da keywords a perl-compatible pattern

  1. #1
    express non è connesso AlterVistiano
    Data registrazione
    08-08-2003
    Residenza
    Cagliari/Pisa
    Messaggi
    799

    Predefinito passare da keywords a perl-compatible pattern

    stavo scrivendo un piccolo motore di ricerca per siti statici che fa pesante utilizzo delle espressioni regolari.

    ho il seguente problema: non riesco a passare da keyword in stile google ad una stringa di pcre-pattern accettabile. in particolare non riesco a implementare le funzioni per non cercare solo parole intere e le keyword quotate.

    Esempi:
    keyword: ecco pippo
    Codice PHP:
    $pcre_pattern = "@(.+)\becco\bpippo\b(.+)@sUi"
    keyword: "ecco pippo" "tizio caio"
    Codice PHP:
    $pcre_pattern = "@(.+)\becco\Wpippo\b(.+)(.+)\btizio\Wcaio\b(.+)sUi"
    keyword: ecco "tizio caio"
    Codice PHP:
    $pcre_pattern = "@(.+)\becco\b(.+)(.+)\btizio\Wcaio\b(.+)@sUi"
    keyword: @ecco "@tizio caio" (e così per tutti i caratteri non alfanumerici ad eccezione dello spazio)
    Codice PHP:
    $pcre_pattern = "@\@(.+)\becco\b(.+)(.+)@tizio\Wcaio\b(.+)@sUi"
    le pcre_pattern sono corrette?

    fino a mo' ho solo fatto un casotto, di cui riporto il log
    (non mi aspetto che questo codice funzioni come richiesto, è solo il meno peggio che sono riuscito a fare )

    Codice PHP:
    function search__needle2regex($needle, $whole_words, $case_sensitive)
    {
    if (
    $whole_words) {
    $a_pcre_pattern[] = "@\w(.+)@U";
    $a_pcre_replace[] = "($0)(.+)";
    }
    $a_pcre_pattern[] = "@ @U";
    $a_pcre_replace[] = "\\W";
    if(
    preg_match_all("@\\\"(.+)\\\"@U", $needle, $matches)) {
    $a_pcre_pattern[] = "@\\\"(.+)\\\"@U";
    $a_pcre_replace[] = "(.+)$1(.+)";
    }
    $pcre_needle = preg_replace($a_pcre_pattern, $a_pcre_replace, $needle);
    $pcre_needle = "@" . $pcre_needle . "@sU";
    if (!
    $case_sensitive) { $pcre_needle .= "i"; }
    return
    $pcre_needle;
    }
    Ultima modifica di express : 12-12-2005 alle ore 20.22.52
    http://express.altervista.org
    Dato un lavoro, si possono scegliere due sole delle seguenti caratteristiche: veloce, economico, di qualità.
    Così capita che se un lavoro è veloce ed economico non sarà di qualità; se è veloce e di qualità non sarà economico; se è economico e di qualità non sarà veloce.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •