SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 04.04.2005, 15:11:36
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
regulärer Ausdruck

Hallo!

Ich habe ein Problem mit einem regex:

"%[[(.+)](.+)]%Use" => 'make_a_link( "$1" , "$2" )' (funktion siehe weiter unten)

Aus

[bla[blubb]] soll <a href="bla">blubb</a> werden

alles prima sonderklasse, wenn sonst nix mehr in der richtung danach kommt.

steht da

[bla[blubb]]

[[blo]] (was dannzu <a href="blo">blo</a> werden soll)

steht im quältext:

<a href="bla%5Dblubb%5D%0A%0A%5B%5Bblo">bla]blubb]<br />
<br />
[[blo</a><br />
</p><br />
<a href="index.php?prgm=wiki&mode=edit">edit</a> <a href="index.php?prgm=wiki&mode=lock">lock</a><br /></div>

es wird also nicht ungreedy gemachted, obwohl ich ja extra dafür U angegeben habe.

make_a_link sieht so aus:
PHP-Code:
function make_a_link$one $two '' ) {
    
        if( empty( 
$two ) ) 
            return 
"<a href="" . rawurlencode( html_entity_decode( $one ) ) . "">$one</a>";
        else
            return 
"<a href="" . rawurlencode( html_entity_decode( $one ) ) . "">$two</a>";    
    
    } 
wo liegt mein denkfehler?
Mit Zitat antworten
  #2  
Alt 04.04.2005, 15:19:55
Small-Talk Small-Talk ist offline
Junior Member
 
Registriert seit: Jan 2004
Ort: Fredersdorf bei Berlin
Alter: 40
Beiträge: 184
AW: regulärer Ausdruck

Bin mir net sicher. probier mal (.+?)

und du filterst bei "[bla[blubb]]" das bla nicht raus

Geändert von Small-Talk (04.04.2005 um 15:21:16 Uhr)
Mit Zitat antworten
  #3  
Alt 04.04.2005, 15:21:28
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: regulärer Ausdruck

mach ich nachher mal,

"%[[(.+)]([^]]+)]%Use"

hat auch nix gebracht...
Mit Zitat antworten
  #4  
Alt 04.04.2005, 15:47:15
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
AW: regulärer Ausdruck

Schau mal, so läuft es:

PHP-Code:
<?php
$str 
'[bla[blubb]]

[[blo]]'
;

echo 
preg_replace_callback('%[(.*)[(.+)]]%Us''make_a_link'$str);

function 
make_a_link($matches){
    if(empty(
$matches[1]))
        return 
'<a href="' rawurlencode(html_entity_decode($matches[2])) . '">' $matches[2] . '</a>';
    else
        return 
'<a href="' rawurlencode(html_entity_decode($matches[1])) . '">' $matches[2] . '</a>';
}
?>
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #5  
Alt 04.04.2005, 18:58:32
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: regulärer Ausdruck

okay, ich werde mal schauen. allerdings hat dein pattern

%[(.*)[(.+)]]%Us

einen kleinen schöhnheitsfehler, deins matched auf [bla[blubb]]
Mit Zitat antworten
  #6  
Alt 04.04.2005, 19:29:18
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: regulärer Ausdruck

geschafft!

ich habe einfach mal die reihenfolge der pattern geändert :-)

PHP-Code:
$regex         = array( "%[[(.+)](.+)]%Use"  "%[[(.+)]]%Use" ); 
                
$replace        = array( 'make_a_link( "$1" , "$2" )' 'make_a_link( "$1" )' );
            
                
$string         preg_replace$regex $replace $string ); 
Mit Zitat antworten
  #7  
Alt 04.04.2005, 19:54:19
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
AW: regulärer Ausdruck

Ja ganz wie Du es wolltest :-)
Zitat:
Zitat von feuervogel
[bla[blubb]] soll <a href="bla">blubb</a> werden
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #8  
Alt 04.04.2005, 20:39:46
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
AW: regulärer Ausdruck

Ach, und wenn Du [[bla]blub] oder [[bla]] matchen willst, dann halt so (und zwar ohne Arrays):
PHP-Code:
<?php
$str 
'[bla[blubb]]

[[blo]]'
;

echo 
preg_replace_callback('%[[(.+)](.*)]%Us''make_a_link'$str); 

function 
make_a_link($matches){ 
    if(empty(
$matches[2]))
        return 
'<a href="' rawurlencode(html_entity_decode($matches[1])) . '">' $matches[1] . '</a>'
    else 
        return 
'<a href="' rawurlencode(html_entity_decode($matches[1])) . '">' $matches[2] . '</a>'
}
?>
Ausserdem ist meine Methode schneller (bei größeren Datenmengen ca. doppelt so schnell). :-)
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
  #9  
Alt 04.04.2005, 23:20:24
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: regulärer Ausdruck

Zitat:
Zitat von |Coding
Ausserdem ist meine Methode schneller (bei größeren Datenmengen ca. doppelt so schnell). :-)
wie misst du sowas?

ich werds jetzt erst mal so machen, wird dann eh open-source (wie bei php so üblich), dann darfst dus auch gerne verbesser :-)
Mit Zitat antworten
  #10  
Alt 04.04.2005, 23:50:31
Benutzerbild von |Coding
|Coding |Coding ist offline
Administrator
 
Registriert seit: Apr 2002
Ort: Bergheim
Alter: 41
Beiträge: 5.255
|Coding eine Nachricht über Skype™ schicken
AW: regulärer Ausdruck

Hi Julian.

Ich meine das so:

Wenn Du der Funktion preg_replace() als Input "[[foo]bar]" übergibst, dann fällt da kein Geschwindigkeitsunterschied auf. Doch wenn Du der Funktion jetzt z.B. 1 KB Daten als Input übergibst, dann wäre meine Variante ca. ein drittel schneller.

Benchmark:

------ Einstellungen ------
dfgsdfgsdfgsdf [[blubb]bla] ncvbnnnnnhgfffffffffddddddd dj fjtzj tz jtdzj tdz jtz jtz [[blubb]]dtzj dtzjdtzjd tzjfdtzjdtz [[blubb]]rtzhd rthdtrz drhdrt r drt[[blubb]]zuztutumtrzumtrzu ztr utrzu rztu rtzuztru467 4z56i6 rk il ioö-io zk t srths[[blubb]]jhh [[blubb]] hjjh[[blubb]]tzz trz i67u 46 z34z 46z trh z rm[[blubb]bla] ncvbnnnnnhgfffffffffddddddd dj fjtzj tz jtdzj tdz jtz jtz [[blubb]]dtzj dtzjddtzjdtz [[blubb]]rtzhd rthdtrz drhdrt r drt[[blubb]]zuztutumtrzumtrzu ztr utrzu rztu rtzuztru467 4z56i6 rk il ioö-io zk t srths[[blubb]] [[blubb]] [[blubb]]tzz trz i67u 46 z34z 46z trh z rm[[blubb]bla] ncvbnnnnnhgfffffffffddddddd dj fjtzj tz jtdzj tdz jtz jtz [[blubb]]dtzj dtzjdtzjd tzjfdtzjdtz [[blubb]]rtzhd rthdtrz drhdrt r drt[[blubb]]zuztutumtrzumtöärzu ztr utrzu rztu rtzuztru467 4z56i6 rk il ioö-io zk t srths[[blubb]] löl[[blubb]]kökl [[blubb]]tzz trz i67u 46 z34z 46z trh z rm[[blubb]bla] ncvbnnnnnhgfffffffffddddddd dj fjtzj tz jtdzj tdz jtz jtz [[blubb]]dtzj dtzjdtzjd tzjfdtzjdtz [[blubb]]rtzhd rthdtrz drhdrt r

Datenlänge: 1024 Byte
Replacements: 24
---------------------------
Deine Variante: ~78 ms
Meine Variante: ~60 ms
---------------------------
System:

- Win32
- PHP 4.3.11
- Apache 2.0.52
- PII @ 450MHz
---------------------------

Nicht nur das Deine Variante langsamer ist, Nein, es kommt auch nicht wirklich das gewünschte raus. Bei meiner schon und schneller ist sie auch :-)
__________________
Gruß |Coding

---
Qozido® - Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.

www.qozido.de
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
regulärer Ausdruck nivram PHP für Fortgeschrittene und Experten 19 22.02.2005 09:10:25
Regulärer Ausdruck Phil PHP für Fortgeschrittene und Experten 6 07.07.2004 15:25:46
Problem: Regulärer Ausdruck? Funjoy PHP für Fortgeschrittene und Experten 6 30.06.2004 10:40:52
Kniffliger regulärer Ausdruck DiJae PHP für Fortgeschrittene und Experten 7 20.02.2004 16:29:09
welchen regulärer ausdruck? franz_5 PHP für Fortgeschrittene und Experten 6 01.07.2003 23:01:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:37:30 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt