Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    Regex divisore e dividendo

    Ciao a tutti! vorrei creare un'espressione regolare capace di estrarmi il dividendo e il divisore da una stringa.
    quindi se ho: 5/2 deve estrarmi array("5","2")
    se ho (5+2)/2 deve estrarmi array("5+2","2")
    se ho (5+2)/(1+1) deve estrarmi array("5+2","1+1")
    in pratica tutti i casi per svolgere la divisione in modo corretto
    grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao iacoposk, potresti usare la explode

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    Peró pptrei trovarmi nel caso 5/2+7 e quindi il +7 andrebbe escluso per avere ik risiltato corretto

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Con la exlode otterresti un array('5','2+7').
    E' il primo step di suddivisione delle parti in caso di divisioni semplici.

    In che senso il 7 andrebbe escluso?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    5/2+7 va risolto facendo prima la divisione, quindi 2.5 e poi più 7
    se noi facciamo split verrebbe risolta come 5/9 e il risultato sarebbe sbagliato

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Non è con un'espressione regolare, ma questo funziona:
    Codice PHP:
    function parse_fraction ($fraction) {
        list(
    $n$d) = explode("/"$fraction);
        
    $n strrev($n);
        foreach (array(
    "n""d") as $var) {
            
    $brackets 0;
            
    $parsed "";
            foreach (
    str_split($$var) as $token) {
                if (
    $token == "(") {
                    if (
    $brackets != && $brackets != -1) {
                        
    $parsed .= "(";
                    }
                    
    $brackets++;
                } else if (
    $token == ")") {
                    if (
    $brackets != && $brackets != 1) {
                        
    $parsed .= ")";
                    }
                    
    $brackets--;
                } else if (
    in_array($token, array("+""*""-")) && $brackets == 0) {
                    break;
                } else {
                    
    $parsed .= $token;
                }        }
            $
    $var $parsed;
        }
        return array(
    strrev($n), $d);} 
    Codice PHP:
    print_r(parse_fraction("(5+2)/((3^4)+3)-5")); // stampa Array ( [0] => 5+2 [1] => (3^4)+3 ) 
    Ultima modifica di tampertools; 12-02-2015 a 18:31
    No

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.