Regular Expressions Matter

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

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

Απάντηση
Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Regular Expressions Matter

Δημοσίευση από Cha0s » 01 Μαρ 2005 19:20

Λοιπόν,

Έστω ότι έχουμε την μεταβλητή $text

H μεταβλητή αυτή έχει για παράδειγμα το παρακάτω περιεχόμενο:

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

......<IMG style="WIDTH&#58; 184px; HEIGHT&#58; 171px" height=205 alt="" hspace=10 src="http&#58;//domain/uploaded_images_small/11-wlp10.jpg" width=289 align=left vspace=2 border=0>Οι πυρηνικοί αντιδραστήρες που καλύπτουν το 78% των ενεργειακών απαιτήσεων της Γαλλίας είναι όχι μόνο η οικονομικότερη αλλά και η πλέον «καθαρή» λύση, υποστηρίζουν ο Ζακ Σιράκ και άλλοι Γάλλοι πολιτικοί και επιστήμονες. 
<P></P>
<P>Η πυρηνική ενέργεια δεν επιβαρύνει την ατμόσφαιρα με διοξείδιο του άνθρακα, το κυριότερο από τα αέρια που προκαλούν το φαινόμενο του θερμοκηπίου. Καθώς η διεθνής κοινότητα θέτει σε εφαρμογή το Πρωτόκολλο του Κιότο, η ατομική ενέργεια θα μπορούσε να αποτελέσει εργαλείο για την προστασία του περιβάλλοντος, εκτιμούν ο Σιράκ και άλλοι.</P>
<P>Όπως αναφέρει το BBC, ο Γάλλος πρόεδρος δήλωσε σε συνέδριο για την ασφάλεια της πυρηνικής ενέργειας, το οποίο πραγματοποιήθηκε πρόσφατα στη Μόσχα, ότι η πυρηνική ενέργεια είναι η «καθαρότερη» λύση στην περίπτωση της Γαλλίας.</P>
<P>Πράγματι, οι 58 αντιδραστήρες της χώρας λειτουργούν χωρίς σοβαρές αντιδράσεις από το κοινό.<IMG style="WIDTH&#58; 217px; HEIGHT&#58; 189px" height=294 alt="" hspace=10 src="http&#58;//domain/uploaded_images_small/11-wlp10.jpg/ABSTRACT1.jpg" width=254 align=right vspace=2 border=0></P>......
Εγώ θέλω τώρα δυναμικά να βρίσκω τι υπάρχει μέσα στο src="..." από κάθε <img> tag και να το βάζω σε μία μεταβλητή.

Από αυτή την μεταβλητή θα βρίσκω το url (http://domain/uploaded_images_small/) θα κόβω το _small και θα το κάνω http://domain/uploaded_images/
Έστω ότι αυτή την μεταβλητή την ονομάζω
$path

Μετά θα βρίσκω το filename (11-wlp10.jpg) και θα το αποθηκέυω σε μία άλλη μεταβλητή.
Έστω ότι η 2η μεταβλητή είναι
$file

Αφού τώρα έχω αυτές τις 2 μεταβλητές γνωρίζω που βρίσκεται η εικόνα που υπάρχει στον server.
Οπότε μπορώ να βρω τις διαστάσεις της εικόνας.

Έστω ότι το array με τις διαστάσεις, τύπο κλπ το ονομάζω
$xy


Μετά θέλω πριν από κάθε <img> να προσθέτω αυτό:

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

<a href="javascript&#58;;" onClick="openPictureWindow_Fever&#40;'i<?=$path . $file;?>','<?=$xy&#91;0&#93;;?>','<?=$xy&#91;1&#93;;?>','','',''&#41;">
Μετά να ακολουθεί το <img> ανέπαφο με ότι arguement είχε αρχικά και ύστερα το κλείσιμο του <a> δηλαδή

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

</a>


Απόσο καταλαβαίνω θα γίνει με regular expressions αλλά δεν βγάζω άκρη με reg exp οπότε ζητώ την βοήθεια σας :D

ΥΓ:
Ότι είναι με πράσινο χρώμα ξέρω πως να το κάνω.
Ότι είναι με κόκκινο είναι η βοήθεια που ζητάω καθώς δεν γνωρίζω κάποιο τρόπο να το κάνω

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

Regular Expressions Matter

Δημοσίευση από softius » 01 Μαρ 2005 20:16

Μπορείς να χρησιμοποιήσεις την preg_replace_callback γι αυτό που θέλεις. Νομίζω πως θα είναι αρκετά βοηθητικό και θα κανει τα πραγματα πιο απλά για σένα

π.χ.

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

$text = preg_replace_callback&#40;"!<img.*?src="&#40;&#91;^"&#93;*?&#41;".*?/?>!i", "your_function" $text&#41;;

function your_function&#40;$matches&#41; &#123;
  //sto matches&#91;0&#93; yparxei olo to img tag
  //sto matches&#91;1&#93; yparxei to src attribute tou image tag

  //kapou edw kaneis ekeina me ta prasina grammata &#58;P

  //sto telos 8a prepei na kaneis return 
  //auto pou 8a kanei replace to img tag

  //ena aplo paradeigma pou vazei link gia thn eikona einai&#58;
  return '<a href="'. $matches&#91;1&#93; .'">'. $matches&#91;0&#93; .'</a>';
&#125;
Λόγω χρόνου τα έχω γράψει λίγο σύντομα. Ελπίζω να βοήθησα :D

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Regular Expressions Matter

Δημοσίευση από Cha0s » 01 Μαρ 2005 20:19

Θα το δοκιμάσω.

Σε ευχαριστώ πολύ :):):)

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Regular Expressions Matter

Δημοσίευση από Cha0s » 08 Μαρ 2005 09:05

Τελικά δούλεψε άψογα!

Μία μικρή διορθωσούλα μόνο:

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

$text = preg_replace_callback&#40;"!<img.*?src=\"&#40;&#91;^\"&#93;*?&#41;\".*?/?>!i", "your_function", $text&#41;; 
Είχες ξεχάσει 3 escape characters και ένα κόμα :wink:

Thanks και πάλι man!
Με έσωσες! :D :D

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

Regular Expressions Matter

Δημοσίευση από softius » 08 Μαρ 2005 09:52

:o Απαράδεκτος είμαι :oops:

Χαίρομαι όμως που βοήθησα :pint: :pint:

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Regular Expressions Matter

Δημοσίευση από Rapid-eraser » 08 Μαρ 2005 10:36

av 8es va apofigeis ta escapes mporeis va baleis mova quotes mesa sto patern
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Regular Expressions Matter

Δημοσίευση από Cha0s » 08 Μαρ 2005 10:39

Το δοκίμασα Φίλιππα αλλά δεν έπαιζε...

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Regular Expressions Matter

Δημοσίευση από Rapid-eraser » 08 Μαρ 2005 10:49

mia xara piavei :P miv me treleveis !!!

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

'!<img.*?src="&#40;&#91;^"&#93;*?&#41;".*?/?>!i'
afto eivai to patern pou 8a baleis
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Regular Expressions Matter

Δημοσίευση από Cha0s » 08 Μαρ 2005 11:06

Μπορεί... δεν ξέρω... στις 5 το πρωί που το έκανα μπορεί να έγραφα ότι νάναι και να μην δούλευε :D:D

Αφού μου δούλεψε τώρα δεν με πειράζει το αφήνω όπως είναι :D

Απάντηση

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

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

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