Πρόβλημα με regular expression

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
poscore
Δημοσιεύσεις: 63
Εγγραφή: 06 Μάιος 2012 02:48
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από poscore » 23 Ιουν 2012 02:51

Καλησπέρα είμαι στη μέση ενός project Που σκέφτηκα να υλοποιήσω και έχω κολλήσει σε ένα σημείο. Χρησιμοποιώ την curl για να επιστρέψω ένα κομμάτι και δεν μου δουλεύει μια σύνταξη ενός regular expression.

το κείμενο στο οποίο θέλω να εφαρμόσω το expression είναι κάτι σαν

Κώδικας: Επιλογή όλων

<td colspan="2" valign="top" class="topBorderLight">&#40;ΠΛΥ105&#41;  Απειροστικός Λογισμός Ι<span class="redfonts" /></td>
αυτό που έχω σκεφτεί είναι

Κώδικας: Επιλογή όλων

'/><td colspan="2" valign="top" class="topBorderLight">&#40;.*&#41;<span class="redfonts" \/><\/td>/'
που προφανώς είναι πολύ γενικό. Εγώ θέλω να παίρνω μόνο τον κωδικό μαθήματος δλδ στο παραπάνω παράδειγμα το 105 καθώς είναι και μοναδικός! Το expression που δεν μου δεουλεύει είναι:

Κώδικας: Επιλογή όλων

'/><td colspan="2" valign="top" class="topBorderLight">\&#40;.*&#40;&#91;0-9&#93;&#123;3&#125;&#41;\&#41;  .*<span class="redfonts" \/><\/td>/'
ευχαριστώ για κάθε βοήθεια...

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από gvre » 23 Ιουν 2012 13:17

Δοκίμασε το παρακάτω pattern

Κώδικας: Επιλογή όλων

'#<td colspan="2" valign="top" class="topBorderLight">\&#40;&#91;^0-9&#93;+&#40;&#91;0-9&#93;+&#41;\&#41;&#91;^<&#93;+<span class="redfonts" /></td>#'

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Πρόβλημα με regular expression

Δημοσίευση από jpk » 23 Ιουν 2012 15:09

Σε γενικές γραμμές οι Regular Expressions δεν είναι το δυνατότερο σημείο της PHP. Σίγουρα θα κέρδιζες πόρους αλλά και ταχύτητα ανάπτυξης αν χρησιμοποιούσες κάποιον html parser (για παράδειγμα ο http://sourceforge.net/projects/simplehtmldom είναι αρκετά καλός)

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από gvre » 23 Ιουν 2012 17:28

Regular expressions χρησιμοποιεί και ο simplehtmldom :)

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Πρόβλημα με regular expression

Δημοσίευση από jpk » 23 Ιουν 2012 18:01

Έτσι είναι gvre αλλά σίγουρα η PHP δεν τα πάει καλά με τα regexps (δυστυχώς θα μπορούσα να πω και περισσότερα &#8230; μιας και σε PHP δουλεύω πια αλλά συγκρίνω σε πόρους) και σίγουρα είναι καλύτερα να χρησιμοποιείς κάποιες λύσεις βελτιστοποίησης. Ακόμα και η DOMDocument μπορεί να κάνει την δουλεία συνήθως. Η κλάση που πρότεινα χρησιμοποιεί regexps αλλά στις περισσότερες περιπτώσεις είναι καλύτερο να μην γράφεις εσύ το τι θες και να υπάρχει ένα απλό μοτίβο που απλοποιεί και τα μετατρέπει σε αντικείμενο.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από gvre » 23 Ιουν 2012 18:27

Ανάλογα την περίπτωση χρησιμοποιείς το κατάλληλο εργαλείο.
Για πες περισσότερα :)

poscore
Δημοσιεύσεις: 63
Εγγραφή: 06 Μάιος 2012 02:48
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από poscore » 23 Ιουν 2012 19:19

1. τα expressions που χρησιμοποιώ είναι δυο. Ένα γενικό τύπου (.*) που τα παίρνει όλα και δουλεύει. Μετά το αλλάζω σε κάτι άλλο το οποίο το έχω τεστάρει σε ένα site και είναι ολόσωστο αλλα δεν δουλεύει. Μπαίνει στο else του pregmatchall.

2. Είναι ένα site της σχολής μου για βαθμούς και θέλω να πάρω την σελίδα πίσω, να μεταβώ σε μια σελίδα με βαθμούς και να βάλω σε έναν πίνακα κωδικό μαθήματος(μοναδικός) και βαθμός. Για να κάνω υπολογισμούς μετα...

poscore
Δημοσιεύσεις: 63
Εγγραφή: 06 Μάιος 2012 02:48
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από poscore » 23 Ιουν 2012 19:22

1. τα expressions που χρησιμοποιώ είναι δυο. Ένα γενικό τύπου (.*) που τα παίρνει όλα και δουλεύει. Μετά το αλλάζω σε κάτι άλλο το οποίο το έχω τεστάρει σε ένα site και είναι ολόσωστο αλλα δεν δουλεύει. Μπαίνει στο else του pregmatchall.

2. Είναι ένα site της σχολής μου για βαθμούς και θέλω να πάρω την σελίδα πίσω, να μεταβώ σε μια σελίδα με βαθμούς και να βάλω σε έναν πίνακα κωδικό μαθήματος(μοναδικός) και βαθμός. Για να κάνω υπολογισμούς μετα...

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από gvre » 23 Ιουν 2012 19:49

Μπορείς να στείλεις το url της σελίδας που έχει την πληροφορία, καθώς επίσης και το κομμάτι του κώδικά σου με το regular expression;
Το .* είναι greedy. Είναι προτιμότερο να χρησιμοποιείς negated character classes. Δες περισσότερα στο παρακάτω regex tutorial.

tango
Δημοσιεύσεις: 123
Εγγραφή: 20 Σεπ 2011 05:32

Πρόβλημα με regular expression

Δημοσίευση από tango » 23 Ιουν 2012 19:52

jpk έγραψε:Έτσι είναι gvre αλλά σίγουρα η PHP δεν τα πάει καλά με τα regexps (δυστυχώς θα μπορούσα να πω και περισσότερα &#8230; μιας και σε PHP δουλεύω πια αλλά συγκρίνω σε πόρους) και σίγουρα είναι καλύτερα να χρησιμοποιείς κάποιες λύσεις βελτιστοποίησης.
Metrics or it didn't happen. :hammer:

poscore
Δημοσιεύσεις: 63
Εγγραφή: 06 Μάιος 2012 02:48
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από poscore » 23 Ιουν 2012 20:01

gvre έγραψε:Μπορείς να στείλεις το url της σελίδας που έχει την πληροφορία, καθώς επίσης και το κομμάτι του κώδικά σου με το regular expression;
Το .* είναι greedy. Είναι προτιμότερο να χρησιμοποιείς negated character classes. Δες περισσότερα στο παρακάτω regex tutorial.
Οτι μπορώ, μπορώ να το στείλω αλλα δεν θα δείς τπτ. Need password. Αλλα...

αυτό που μου επιστρέφει η curl

Κώδικας: Επιλογή όλων

<td width="100%" align="right" height="20">
                                <img src="images/course1.gif" WIDTH="16" HEIGHT="16">&nbsp;<i>Απλό μάθημα</i>&nbsp;<img src="images/course4.gif" WIDTH="16" HEIGHT="16">&nbsp;<i>Σύνθετο μάθημα</i>
                        &nbsp;<img src="images/course8.gif" WIDTH="16" HEIGHT="16">&nbsp;<i>Μέρος σύνθετου μαθήματος</i>
                </td></tr>
        <?xml version="1.0" encoding="UTF-16"?><tr><td colspan="2"><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td colspan="10" class="groupHeader">Εξάμηνο Α</td></tr><tr height="25" class="italicHeader"><td valign="top"></td><td colspan="2" valign="top">Μάθημα</td><td valign="top">Τύπος</td><td valign="top">ΔΜ</td><TD valign="top">Ώρες</TD><td valign="top">ECTS</td><td valign="top">Βαθμός</td><td valign="top">Εξεταστική</td></tr><tr height="25" bgcolor="#fafafa"><td valign="top"> <img align="absbottom" src="images/course1.gif" width="16" /></td><td colspan="2" valign="top" class="topBorderLight">&#40;ΠΛΥ109&#41;  Γενική Φυσική Ι<span class="redfonts" /></td><td valign="top" class="topBorderLight">ΥΠΟΧΡΕΩΤΙΚΟ</td><td valign="top" class="topBorderLight"> 4</td><td valign="top" class="topBorderLight">4</td><td valign="top" class="topBorderLight"> 5</td><td valign="top" class="topBorderLight"><span class="redFonts">6</span></td><td nowrap="true" class="topBorderLight"><span class="tablecell"><i>ΦΕΒΡ 
                                                                2009-2010</i></span></td></tr><tr height="25" bgcolor="#fafafa"><td valign="top"> <img align="absbottom" src="images/course1.gif" width="16" /></td><td colspan="2" valign="top" class="topBorderLight">&#40;ΠΛΥ105&#41;  Απειροστικός Λογισμός Ι<span class="redfonts" /></td><td valign="top" class="topBorderLight">ΥΠΟΧΡΕΩΤΙΚΟ</td><td valign="top" class="topBorderLight"> 5</td><td valign="top" class="topBorderLight">5</td><td valign="top" class="topBorderLight"> 5</td><td valign="top" class="topBorderLight"><span class="redFonts">8</span></td><td nowrap="true" class="topBorderLight"><span class="tablecell"><i>ΦΕΒΡ 
                                                                2009-2010</i></span></td></tr><tr height="25" bgcolor="#fafafa"><td valign="top"> <img align="absbottom" src="images/course1.gif" width="16" /></td><td colspan="2" valign="top" class="topBorderLight">&#40;ΠΛΥ106&#41;  Εισαγωγή στον Προγραμματισμό<span class="redfonts" /></td><td valign="top" class="topBorderLight">ΥΠΟΧΡΕΩΤΙΚΟ</td><td valign="top" class="topBorderLight"> 5</td><td valign="top" class="topBorderLight">5</td><td valign="top" class="topBorderLight"> 7</td><td valign="top" class="topBorderLight"><span class="redFonts">7</span></td><td nowrap="true" class="topBorderLight"><span class="tablecell"><i>ΦΕΒΡ 
                                                                2009-2010</i></span></td></tr><tr height="25" bgcolor="#fafafa"><td valign="top"> <img align="absbottom" src="images/course1.gif" width="16" /></td><td colspan="2" valign="top" class="topBorderLight">&#40;ΠΛΥ104&#41;  Εφαρμοσμένη Γραμμική Άλγεβρα<span class="redfonts" /></td><td valign="top" class="topBorderLight">ΥΠΟΧΡΕΩΤΙΚΟ</td><td valign="top" class="topBorderLight"> 5</td><td valign="top" class="topBorderLight">5</td><td valign="top" class="topBorderLight"> 6.5</td><td valign="top" class="topBorderLight"><span class="redFonts">5</span></td><td nowrap="true" class="topBorderLight"><span class="tablecell"><i>ΣΕΠΤ 
                                                                2009-2010</i></span></td></tr><tr height="25" bgcolor="#fafafa"><td valign="top"> <img align="absbottom" src="images/course1.gif" width="16" /></td><td colspan="2" valign="top" class="topBorderLight">&#40;ΠΛΥ108&#41;  Εισαγωγή στους Η/Υ<span class="redfonts" /></td><td valign="top" class="topBorderLight">ΥΠΟΧΡΕΩΤΙΚΟ</td><td valign="top" class="topBorderLight"> 5</td><td valign="top" class="topBorderLight">5</td><td valign="top" class="topBorderLight"> 6.5</td><td valign="top" class="topBorderLight"><span class="redFonts">7</span></td><td nowrap="true" class="topBorderLight"><span class="tablecell"><i>ΦΕΒΡ 
                                                                2009-2010</i></span></td></tr><tr height="25" bgcolor="#fafafa"><td valign="top"> <img align="absbottom" src="images/course1.gif" width="16" /></td><td colspan="2" valign="top" class="topBorderLight">&#40;ΠΛΥ111&#41;  Αγγλικά Ι<span class="redfonts" /></td><td valign="top" class="topBorderLight">ΞΕΝΗ ΓΛΩΣΣΑ</td><td valign="top" class="topBorderLight"> 0</td><td valign="top" class="topBorderLight">1</td><td valign="top" class="topBorderLight"> 0</td><td valign="top" class="topBorderLight"><span class="redFonts">6</span></td><td nowrap="true" class="topBorderLight"><span class="tablecell"><i>ΦΕΒΡ 
                                                                2009-2010</i></span></td></tr><tr height="20" class="subHeaderBack"><td colspan="3">Σύνολα περασμένων μαθημάτων εξαμήνου&#58;
                                                                        <b>6</b></td><td colspan="10" nowrap="true" align="right" class="tablecell">ΜΟ&#58; 
                                                                        <span class="error">6.50</span>
                                                         
                                                                                ΔΜ&#58;  
                                                                                <span class="error">24 </span>
                                                                                        Ώρες&#58;  
                                                                                        <span class="error">25 </span>
                                                                                        ECTS&#58;  
και το expression

Κώδικας: Επιλογή όλων

$httppage = curl_exec&#40;$login&#41;;					// ανοίγουμε το λινκ αλλα με κωδικούς

	/* μετάβαση στον πίνακα βαθμολογιών */
	$url_grades = "https&#58;//cronos.cc.uoi.gr/unistudent/stud_CResults.asp?studPg=1&mnuid=mnu3&";

	curl_setopt&#40;$login, CURLOPT_URL, $url_grades&#41;;
	curl_setopt&#40;$login, CURLOPT_POST, false&#41;; 
        curl_setopt&#40;$login, CURLOPT_COOKIEFILE, "cookie.txt"&#41;;  

        curl_setopt&#40;$login, CURLOPT_RETURNTRANSFER, true&#41;;              // μας επιστρέφει την σελίδα σε μεταβλητή
        curl_setopt&#40;$login, CURLOPT_USERAGENT, "Mozilla/5.0 &#40;X11; Ubuntu; Linux i686; rv&#58;12.0&#41; Gecko/20100101 Firefox/12.0"&#41;;
        curl_setopt&#40;$login, CURLOPT_FOLLOWLOCATION, true&#41;;              // ακολοθούμε όλα τα redirects
        curl_setopt&#40;$login, CURLOPT_AUTOREFERER, true&#41;;
        curl_setopt&#40;$login, CURLOPT_REFERER,'https&#58;//cronos.cc.uoi.gr/unistudent/login.asp'&#41;;
	
	$grades_data = curl_exec&#40;$login&#41;;

	echo $grades_data;
	
	$grades_data = str_replace&#40;'<tr', "\n<tr", $grades_data&#41;;
	//Το regular expresion για να πάρω τα δεδομένα!
	if &#40;preg_match_all&#40;'/><td colspan="2" valign="top" class="topBorderLight">\&#40;.*&#40;&#91;0-9&#93;&#123;3&#125;&#41;\&#41;  .*<span class="redfonts" \/><\/td>/', $grades_data, $matches&#41;&#41; &#123;
        	echo '<textarea rows="30" cols="100">';
        	print_r&#40;$matches&#41;;
        	echo '</textarea>';
	&#125;else&#123;
		echo "Huston we have a problem!";
	&#125;
	curl_close&#40;$login&#41;;
?>

tango
Δημοσιεύσεις: 123
Εγγραφή: 20 Σεπ 2011 05:32

Πρόβλημα με regular expression

Δημοσίευση από tango » 23 Ιουν 2012 20:07

Η αλλαγή γραμμής πριν από το όνομα υπάρχει στο αποτέλεσμα της curl ή είναι προϊόν του quote στο forum?

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από gvre » 23 Ιουν 2012 20:12

Σε εμένα λειτουργεί μια χαρά. Τί ακριβώς τυπώνεται στην οθόνη;

poscore
Δημοσιεύσεις: 63
Εγγραφή: 06 Μάιος 2012 02:48
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από poscore » 23 Ιουν 2012 20:24

Εννοείς το ΦΕΒΡ? Ναι, έτσι είναι δεν το κάνει το φορουμ. Στην οθόνη δεν εκτυπώνεται τπτ αυτό είναι το πρόβλημα :/ Δεν λειτουεγέί το pregmatchall. Δλδ, μπαίνει στο else που έχω.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα με regular expression

Δημοσίευση από gvre » 23 Ιουν 2012 20:26

Το echo $grades_data; δεν εμφανίζει κάτι;

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης