[PHP] preg_replace moeilijk aan het doen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste tweakers,

Het kan niet anders of ik maak het mezelf weer moeilijk.
Wat is er het geval? BB-Code!

Zodra ik met preg_replace google
ga vervangen, wil ik de weten of de url met http:// begint of niet.

Hetzelfde met Afbeeldingslocatie: http://plaatje.jpg. Bij deze wil ik graag met filesize("\\1") het formaat weten en deze controleren.

Maareh? HOE? ik heb dit werkend
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    public function parse($sContent) {
        $search = array(
            '/\[b\](.*?)\[\/b\]/is',
            '/\[i\](.*?)\[\/i\]/is',
            '/\[u\](.*?)\[\/u\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/\[url=(\W?)(.*?)(\W?)\](.*?)\[\/url\]/is',
            '/\[box\](.*?)\[\/box\]/is',
            '/\[title\](.*?)\[\/title\]/is',
        );
        
        $replace = array(
            '<strong>\\1</strong>',
            '<em>\\1</em>',
            '<u>\\1</u>',
            '<img src="' . $this->sImgPath . '/\\1" />',
            '<a href="\\2" target="_blank">\\4</a>',
            '<table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"><tr class="infoBoxContents"><td>\\1</td></tr></table>',
            '<span class="infoBox-title">\\1</span>',
        );

        $var = preg_replace($search, $replace, $sContent);
    
        return $var;
    }

Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Je kunt Google ook voor andere dingen gebruiken: http://www.google.com/search?q=regular+expression+url ;)

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Wat wil je doen als het met http:// begint? wat wil je doen als het niet met http:// begint?

Je zou het mogelijk in je Reguliere expressie kunnen opnemen namelijk.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dusty schreef op donderdag 11 januari 2007 @ 21:09:
Wat wil je doen als het met http:// begint? wat wil je doen als het niet met http:// begint?

Je zou het mogelijk in je Reguliere expressie kunnen opnemen namelijk.
Zodra het NIET met "http://" begint moet er een language var in de link komen:

content.php?pid=5&lang=4

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik doe het maar in 2x, als iemand een nettere oplossing heeft, graag

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    private function parse_default($sContent) {
        $search = array(
            '/\[b\](.*?)\[\/b\]/is',
            '/\[i\](.*?)\[\/i\]/is',
            '/\[u\](.*?)\[\/u\]/is',
            '/\[img\](.*?)\[\/img\]/is',
            '/\[box\](.*?)\[\/box\]/is',
            '/\[title\](.*?)\[\/title\]/is',
        );
        
        $replace = array(
            '<strong>\\1</strong>',
            '<em>\\1</em>',
            '<u>\\1</u>',
            '<img src="' . $this->sImgPath . '/\\1" />',
            '<table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"><tr class="infoBoxContents"><td>\\1</td></tr></table>',
            '<span class="infoBox-title">\\1</span>',
        );
        $var = preg_replace($search, $replace, $sContent);
    
        return $var;
    } 

    private function eval_url_replace($aMatches) {
        //echo "<pre>"; print_r($aMatches);
        if(eregi("^http://" , $aMatches[2])) {
            return '<a href="' . $aMatches[2] . '" target="_blank">' . $aMatches[4] . '</a>';
        } else {
            return '<a href="' . tep_href_link($aMatches[2], "&") . '" >' . $aMatches[4] . '</a>';
        }
    }
    
    public function parse($sContent) {
        // url replace with "http://" check 
        $sContent = preg_replace_callback('/\[url=(\W?)(.*?)(\W?)\](.*?)\[\/url\]/is', array($this,'eval_url_replace'),$sContent);
        $sContent = $this->parse_default($sContent);
        return $sContent;
    }