Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [PHP] apici dentro apici ... rimuovere stringhe dal codice

    potrebbe sembrare una richiesta alquanto stupida e forse lo e' ma ci sto andando via di testa ...

    codice:
    $var = "asd ' adwodk \" awod ".$_GET["asd"]." wao
     aw".$_POST['lol']."kod ko ' adwda ww
    da dw o k";

    sto' cercando il modo di riconoscere queste parti di questa porzione di codice:



    "asd ' adwodk \" awod "

    "asd"

    " wao
    aw"

    'lol'

    "kod ko ' adwda ww
    da dw o k"


    con una o piu' espressioni regolari ... in pratica vorrei riuscire ad eliminare le parti di testo all' interno di un file .php, sia usate come chiavi, sia come stringhe, sia multiline, che non multiline, sia a doppi apostrofi con singoli dentro e/o doppi apostrofi slashsati, sia singoli apostrofi con doppi dentro e/o singoli slashati ...

    per gli slashati non c'e' problema, li elimino in str_replace e poi li riassegno all' interno dei pezzi di stringa trovati, ma come posso fare per riuscire ad ottenere quanto richiesto ???


    provato asserzioni in regexp, e una miriade di espressioni regolari ... non c'e' nulla da fare, non riesco ad ottenere questo risultato.


    Grazie a chi sapra' darmi una mano
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    capito, dammi 5 min che mi sembra fattibile



    [OT]
    sto smanettando con simplexml, funziona bene ma se faccio un errore sintattico nel file xml mi spara errori assurdi e incomprensibili
    [/OT]

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    ci sono quasi, il problema non sono tanto gli apici con il backslash ma far corrispondere un doppio apice di apertura con il suo corrispondente in chiusura (bisogna evitare che termini ad es. quanto incontra in singolo apice nel mezzo...

    oggi pomeriggio ci provo ancora, ora devo andare. Ti faccio sapere

  4. #4
    Originariamente inviato da kuarl
    ci sono quasi, il problema non sono tanto gli apici con il backslash ma far corrispondere un doppio apice di apertura con il suo corrispondente in chiusura (bisogna evitare che termini ad es. quanto incontra in singolo apice nel mezzo...
    questa era la parte piu' semplice ...


    codice:
    $reg = "/(?U)(\")([^\a]*)(\")/m";

    ma sorge il problema se hai una sequenza tipo:


    $var1 = ' bella " rigā ! ';
    $var2 = ' hola " pueblo ';

    che non e' scambiabile con una cosa tipo questa
    $reg = "/(?U)(')([^\a]*)(')/m" ;

    prima di quella prima perche' una sequenza tipo:

    $var1 = " bella ' rigā ! ";
    $var2 = " hola ' pueblo ";

    manderebbe tutto a meretrici lostesso



    in pratica il problema e' far coesistere analiticamente le 2 possibilita' di scrittura del codice ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    io ho il problema opposto, spiegami un po' la tua espressione regolare che non la compriendo

  6. #6
    Originariamente inviato da kuarl
    io ho il problema opposto, spiegami un po' la tua espressione regolare che non la compriendo

    $reg = "/(?U)(\")([^\a]*)(\")/m";

    /(?U) inverte la voracita' della regExp, utile nel 2° match

    (\") 1° match, inizio riscontro

    ([^\a]*) 2° match, zero o piu' occorrenze di qualunque cosa

    (\") 3° match, finisce cosi' ( ergo, prendi li in mezzo ... )

    /m forza il multiline
    ( ESEMPIO:
    $var = "a dwdwa
    awd
    dwa dwa\"dw dwa
    awd dw a";
    )
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    son riuscito a fare qualcosa

    codice:
    /("|').+?\1/is
    questa fa corrispondere ad ogni apice singolo o doppio di apertura lo stesso carattere in chiusura, ignorando tutto quello che c'č nel mezzo, purtroppo xō non riesco a dirgli di ignorare \\' o \"

  8. #8
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    codice:
    /"(\\\"|[^\1])+?"/
    questa invece č solo per gli apici doppi, ma ignora quelli quotati

    ci siamo quasi, ora devo capire come renderla universale

    [edit]
    codice:
    /("|\')(\\\"|\\\'|[^\1])+?\1/


    codice:
    preg_match_all('/("|\')(\\\"|\\\\\'|[^\1])+?\1/', $var, $ris);

  9. #9
    dovremmo esserci ...

    codice:
    "/(?U)('|\")([^\a]*)\\1/sm"
    questa e' quella che mi sembra piu' affidabile in assluto ... ma devo ancora fare delle prove ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Originariamente inviato da kuarl
    t'ho detto che gli slashati li levo a prescindere ... meglio usare un

    $__sd = Array( md5( "\'" ), md5( "\\\"" ) );
    $txt = str_replace( Array( "\'", "\\\"" ), $__sd, $txt );

    che appesantire la preg ... che una volta privata degli slashati va benissimo cosi' :

    "/(?U)('|\")([^\a]*)\\1/sm"


    ora l'unico inghippo e' riuscire a togliere i commenti dal file, poiche' questi potrebbero generare casini ...

    difatti qui in mezzo:

    /*
    awi oidaji OIJ "j ijda oidoiawo jdoij' jIJ Diaojw di oj
    */

    ci scrivi quello che vuoi ...


    la sequenza provata e apparentemente funzionante e' questa:

    // levo gli slashati:
    $__sd = Array( md5( "\'" ), md5( "\\\"" ) );
    $txt = str_replace( Array( "\'", "\\\"" ), $__sd, $txt );

    // levo i commenti tra /* e */ :
    $txt = preg_replace( "/(?U)([[:space:]]*)(\/\*)([^\a]*)(\*\/)([[:space:]]*)/", "\n", $txt );

    // levo le stringhe:
    $txt = preg_replace( "/(?U)('|\")([^\a]*)\\1/sm", "[stringa]", $txt );

    // levo i commenti a singola linea:
    $txt = preg_replace( "/(?U)(\/\/)([^\a]*)(\r\n)/", "\n", $txt );

    ora ho il file privo di qualunque tipo di stringa e contenente le sole variabili ... fammi / fatemi sapere se e' cosi' ...




    unico dubbio
    non ho testato e non saprei ma forse se una variabile avesse:

    $var = "aopwdkkowa k /* odwakodwak */ kdowa kdowa ";

    la parte al centro verrebbe eliminata ... grossa crisi
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.