Visualizzazione risultati 1 fino 1 di 1

Discussione: Espressioni Regolari.

  1. #1
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito Espressioni Regolari.

    benone... dopo una mattinata passata a scribacchiare un po' di codice ho creato questa paginetta php.

    Codice PHP:
    <?
    // errore 0: eccesso di testi di vittoria nel rapporto.
    // errore 1: eccesso di testi di pareggio nel rapporto.
    // errore 2: la divisione in 2 parti non è andata a buon fine
    // errore 3: la divisione del combattimento in round è fallita
    // errore 4: il combattimento ha un numero troppo elevato di round (forse il nome di un partecipante è 'Attaccante' o è stato inserito un rapporto con attacco federato)
    // errore 5a: il parsing di un round normale è fallito
    // errore 5b: il parsing di un round speciale è fallito
    // errore 6a: il parsing della flotta attaccante è fallito
    // errore 6b: il parsing della flotta di difesa è fallito

    $TESTOVITTORIA="ha vinto la battaglia";
    $TESTOPAREGGIO="Il combattimento finisce in equilibrio - entrambe le flotte rimanenti ritornano ai loro pianeti di origine.";
    $TESTOATTACCANTE="Attaccante";
    $TESTOPARSAROUND="^(.+)[\(]{1}([0123456789]+:[0123456789]+:[0123456789]+)[\(]{1}.+Tipo(.+)Numero(.+)Armi.+Difensore(.+)[\(]{1}([0123456789]+):([0123456789]+):([0123456789]+)[\(]{1}.+Tipo(.+)Numero(.+)Armi.+La flotta attaccante spara ([0123456789]+) volte con una potenza di ([0123456789]+) sul difensore. Gli scudi del difensore assorbono ([0123456789]+) punti.+La flotta di difesa spara un totale di ([0123456789]+) volte con una potenza di ([0123456789]+) sull\'attaccante. Gli scudi.+assorbono ([0123456789]+) punti .+$";
    $TESTOPARSAROUNDATTACCANTEDISTRUTTO="^(.)+[\(]{1}([0123456789]+:[0123456789]+:[0123456789]+)[\(]{1}.+Distrutto.+Difensore(.+)[\(]{1}([0123456789]+):([0123456789]+):([0123456789]+)[\(]{1}.+Tipo(.+)Numero(.+)Armi.+$";
    $TESTOPARSAROUNDDIFENSOREDISTRUTTO="^(.)+[\(]{1}([0123456789]+:[0123456789]+:[0123456789]+)[\(]{1}.+Tipo(.+)Numero(.+)Armi.+Difensore(.+)[\(]{1}([0123456789]+):([0123456789]+):([0123456789]+)[\(]{1}.+Distrutto.+$";
    $TESTOPARSAROUNDENTRAMBIDISTRUTTI="^(.)+[\(]{1}([0123456789]+:[0123456789]+:[0123456789]+)[\(]{1}.+Distrutto.+Difensore(.+)[\(]{1}([0123456789]+):([0123456789]+):([0123456789]+)[\(]{1}.+Distrutto.+$";
    $TESTOPARSARIEPILOGOCONRAZIA="^.*cattur[^0123456789e]+([0123456789e]+)[^0123456789e]+([0123456789e]+)[^0123456789e]+([0123456789e]+).+attaccante ha perso un totale di ([0123456789e]+).+difensore ha perso un totale di ([0123456789e]+).+coordinate spaziali ([0123456789e]+).+etallo e ([0123456789e]+).+ristallo.+luna dai detriti . del ([0123456789e]+)%.*$";
    $TESTOPARSARIEPILOGOSENZARAZIA="^.+attaccante ha perso un totale di ([0123456789e]+).+difensore ha perso un totale di ([0123456789e]+).+coordinate spaziali ([0123456789e]+).+etallo e ([0123456789e]+).+ristallo.+luna dai detriti . del ([0123456789e]+)%.*$";
    $TESTOPARSALUNA="particelle di metallo e cristallo alla deriva si attraggono a vicenda";

    // ometto codice che per capire qui è inutile... la parte interessante è questa:

    if ($FETTEARESULT==2) {echo "PARSE ERROR 2";} else {
    if (
    ereg($TESTOATTACCANTE,$COMBATTIMENTO)) {
    $FETTE=split($TESTOATTACCANTE,$COMBATTIMENTO);
    $NUMEROFETTE=count($FETTE);
    if (
    $NUMEROFETTE>9) {echo "PARSE ERROR 4";} else {
    $NUMEROROUND=$NUMEROFETTE-2-$FETTEARESULT;
    for (
    $I=1;$I<$NUMEROROUND+1;$I++) {
    echo
    "<br>TESTOROUNDINCRIMINATO:<br>" . $FETTE[$I] . "<br><br>";
    if (
    ereg($TESTOPARSAROUND,$FETTE[$I],$ROUND[$I])) {
    //nomeattaccante - pianetaattaccante - TIPO - NUMERO - nomedifensore - pianetadifensore - TIPO - NUMERO - spari - potenza - assorbe - spari - potenza - assorbe
    $NOMEATTACCANTE=$ROUND[$I][1];
    $PIANETAATTACCANTE=$ROUND[$I][2];
    $TIPOATTACCANTE=$ROUND[$I][3];
    $NUMEROATTACCANTE=$ROUND[$I][4];
    $NOMEDIFENSORE=$ROUND[$I][5];
    $PIANETADIFENSORE=$ROUND[$I][6];
    $TIPODIFENSORE=$ROUND[$I][7];
    $NUMERODIFENSORE=$ROUND[$I][8];
    $SPARIATTACCANTE=$ROUND[$I][9];
    $POTENZAATTACCANTE=$ROUND[$I][10];
    $ASSORBEDIFENSORE=$ROUND[$I][11];
    $SPARIDIFENSORE=$ROUND[$I][12];
    $POTENZADIFENSORE=$ROUND[$I][13];
    $ASSORBEATTACCANTE=$ROUND[$I][14];
    if (
    ereg("Cargo l.",$TIPOATTACCANTE)) {$MATRIX[1]=1;} else {$MATRIX[1]=0;};
    if (
    ereg("Cargo g.",$TIPOATTACCANTE)) {$MATRIX[2]=1;} else {$MATRIX[2]=0;};
    if (
    ereg("Caccia l.",$TIPOATTACCANTE)) {$MATRIX[3]=1;} else {$MATRIX[3]=0;};
    if (
    ereg("Caccia p.",$TIPOATTACCANTE)) {$MATRIX[4]=1;} else {$MATRIX[4]=0;};
    if (
    ereg("Incro.",$TIPOATTACCANTE)) {$MATRIX[5]=1;} else {$MATRIX[5]=0;};
    if (
    ereg("N. Batt.",$TIPOATTACCANTE)) {$MATRIX[6]=1;} else {$MATRIX[6]=0;};
    if (
    ereg("Col.",$TIPOATTACCANTE)) {$MATRIX[7]=1;} else {$MATRIX[7]=0;};
    if (
    ereg("Ricicl.",$TIPOATTACCANTE)) {$MATRIX[8]=1;} else {$MATRIX[8]=0;};
    if (
    ereg("Sonda spia",$TIPOATTACCANTE)) {$MATRIX[9]=1;} else {$MATRIX[9]=0;};
    if (
    ereg("Bombard.",$TIPOATTACCANTE)) {$MATRIX[10]=1;} else {$MATRIX[10]=0;};
    if (
    ereg("Corazz.",$TIPOATTACCANTE)) {$MATRIX[11]=1;} else {$MATRIX[11]=0;};
    if (
    ereg("Rip",$TIPOATTACCANTE)) {$MATRIX[12]=1;} else {$MATRIX[12]=0;};
    for (
    $J=1;$J<13;$J++) {
    if (
    $MATRIX[$J]==1) {
    if (
    ereg("^[^0123456789]*([0123456789]+(.+)$",$NUMEROATTACCANTE,$AFFETTA)) {
    $NAVEATTACCANTE[$I][$J]=$AFFETTA[1];
    $NUMEROATTACCANTE=$AFFETTA[2];
    } else {echo
    "PARSE ERROR 6a";};
    } else {
    $NAVEATTACCANTE[$I][$J]=0;};
    };
    if (
    ereg("Cargo l.",$TIPODIFENSORE)) {$MATRIX[1]=1;} else {$MATRIX[1]=0;};
    if (
    ereg("Cargo g.",$TIPODIFENSORE)) {$MATRIX[2]=1;} else {$MATRIX[2]=0;};
    if (
    ereg("Caccia l.",$TIPODIFENSORE)) {$MATRIX[3]=1;} else {$MATRIX[3]=0;};
    if (
    ereg("Caccia p.",$TIPODIFENSORE)) {$MATRIX[4]=1;} else {$MATRIX[4]=0;};
    if (
    ereg("Incro.",$TIPODIFENSORE)) {$MATRIX[5]=1;} else {$MATRIX[5]=0;};
    if (
    ereg("N. Batt.",$TIPODIFENSORE)) {$MATRIX[6]=1;} else {$MATRIX[6]=0;};
    if (
    ereg("Col.",$TIPODIFENSORE)) {$MATRIX[7]=1;} else {$MATRIX[7]=0;};
    if (
    ereg("Ricicl.",$TIPODIFENSORE)) {$MATRIX[8]=1;} else {$MATRIX[8]=0;};
    if (
    ereg("Sonda spia",$TIPODIFENSORE)) {$MATRIX[9]=1;} else {$MATRIX[9]=0;};
    if (
    ereg("Bombard.",$TIPODIFENSORE)) {$MATRIX[10]=1;} else {$MATRIX[10]=0;};
    if (
    ereg("Sat. Sol.",$TIPODIFENSORE)) {$MATRIX[11]=1;} else {$MATRIX[11]=0;};
    if (
    ereg("Corazz.",$TIPODIFENSORE)) {$MATRIX[12]=1;} else {$MATRIX[12]=0;};
    if (
    ereg("Rip",$TIPODIFENSORE)) {$MATRIX[13]=1;} else {$MATRIX[13]=0;};
    if (
    ereg("Lanciam.",$TIPODIFENSORE)) {$MATRIX[14]=1;} else {$MATRIX[14]=0;};
    if (
    ereg("Laser l.",$TIPODIFENSORE)) {$MATRIX[15]=1;} else {$MATRIX[15]=0;};
    if (
    ereg("Laser p.",$TIPODIFENSORE)) {$MATRIX[16]=1;} else {$MATRIX[16]=0;};
    if (
    ereg("C. gauss",$TIPODIFENSORE)) {$MATRIX[17]=1;} else {$MATRIX[17]=0;};
    if (
    ereg("C. ionico",$TIPODIFENSORE)) {$MATRIX[18]=1;} else {$MATRIX[18]=0;};
    if (
    ereg("C. plasma",$TIPODIFENSORE)) {$MATRIX[19]=1;} else {$MATRIX[19]=0;};
    if (
    ereg("Cup.",$TIPODIFENSORE)) {$MATRIX[20]=1;} else {$MATRIX[20]=0;};
    if (
    ereg("Cup. p.",$TIPODIFENSORE)) {$MATRIX[21]=1;} else {$MATRIX[21]=0;};
    for (
    $J=1;$J<22;$J++) {
    if (
    $MATRIX[$J]==1) {
    if (
    ereg("^[^0123456789]*([0123456789]+(.+)$",$NUMEROATTACCANTE,$AFFETTA)) {
    $NAVEDIFENSORE[$I][$J]=$AFFETTA[1];
    $NUMERODIFENSORE=$AFFETTA[2];
    } else {echo
    "PARSE ERROR 6b";};
    } else {
    $NAVEDIFENSORE[$I][$J]=0;};
    };
    } else {echo
    "PARSE ERROR 5a";};
    };
    //dovrebbe aver appena compilato i round senza il distrutto.
    e questo è quello che mi da come risultato (per questa parte di codice:
    TESTOROUNDINCRIMINATO:
    Yagami (1:408:8) Armi: 140% Scudi: 130% Corazza: 140% Tipo Caccia l. Caccia p. Incro. N. Batt. Col. Bombard. Corazz. Numero 42800 10 745 2800 1 200 200 Armi 120 360 960 2400 120 2400 4800 Scudi 23 57.5 115 460 230 1150 1150 Corazza 960 2400 6480 14400 7200 18000 26400 Difensore Kira Nerys (1:385:6) Armi: 120% Scudi: 110% Corazza: 120% Tipo Cargo l. Cargo p. Caccia l. N. Batt. Col. Ricicl. Sonda spia Sat. Sol. Lanciam. Laser l. Laser p. C. gauss C. ionico C. plasma Cup. Cup. p. Numero 5 50 2000 420 2 75 200 300 7000 600 225 50 35 95 1 1 Armi 11 11 110 2200 110 2.2 0.022 2.2 176 220 550 2420 330 6600 2.2 2.2 Scudi 21 52.5 21 420 210 21 0.021 2.1 42 52.5 210 420 1050 630 4200 21000 Corazza 880 2640 880 13200 6600 3520 220 440 440 440 1760 7700 1760 22000 4400 22000 La flotta in attacco spara 50951 volte con una potenza di 17570640 sul difensore. Gli scudi del difensore assorbono 671798 punti danno La difesa spara un totale di 11059 volte con una potenza di 3392879 sull\\\'attaccante. Gli scudi della flotta in attacco assorbono 357932 punti danno

    PARSE ERROR 5a
    che sbaglio? perchè non riconosce l'espressione regolare?


    EDIT:
    iopirla. E' Armi, non armeria :D
    provo a vedere se funzia... non funzia. ho corretto il codice del primo post. ma contiene ancora qualche altro errore...
    Ultima modifica di seneca : 22-07-2006 alle ore 17.38.01

Regole di scrittura

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