App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
RegExp und preg_match()
- Ersteller DEATHNET
- Erstellt am
DEATHNET
Lieutnant
- Mitglied seit
- 05.02.2007
- Beiträge
- 75
- Renomée
- 0
- Mein Laptop
- HP ProBook 4530s
- Prozessor
- Intel Core i7-2700K @ 3,9GHz
- Mainboard
- ASUS P8Z68 DELUXE/GEN3
- Kühlung
- Scythe Rasetsu
- Speicher
- Corsair 8GB DDR3-1333 CL9 Dominator
- Grafikprozessor
- ASUS HD7970-DC2T-3GD5 GDDR5
- Display
- Acer V193L
- HDD
- Kingston HyperX SSD 120GB
- Optisches Laufwerk
- LG BluRay-Brenner BH10LS38
- Gehäuse
- Antec Three Hundred ATX
- Netzteil
- be quiet! Dark Power Pro P9 750W
- Betriebssystem
- Microsoft Windows 7 Home Premium 64bit
- Webbrowser
- Mozilla Firefox 14.0.1
Dieser Test führt zu gewolltem Ergebis:
Dieser Versuch gibt allerdings immer ein leeres Array zurück:
ein Test mit Pattern:
gibt:
zurück!
Hab' ich hier irgendwo einen Denkfehler oder irgendwas übersehen?
PHP:
<?php
function grepurl($url) {
preg_match("/(https?|ftps?):\/\/([a-z0-9%&\/=\?~#,\.\-_]+)/i",$url,$matches);
return $matches[0];
}
echo grepurl("<b>http://www.domain.ltd</b>");
?>
Code:
http://www.domain.ltd
Dieser Versuch gibt allerdings immer ein leeres Array zurück:
PHP:
function decodetext($text) {
$text = preg_replace("/\[a\](.*)\[\/a\]/siU","<a href=\"".grepurl("\\1")."\" target=\"_blank\">\\1</a>",$text);
return $text;
}
function grepurl($url) {
preg_match("/(https?|ftps?):\/\/([a-z0-9%&\/=\?~#,\.\-_]+)/i",$url,$matches);
return $matches[0]; # return gibt leeres Array zurück obwohl der String ordnungsgemäß übergeben wird!
}
ein Test mit Pattern:
PHP:
"/(.*)/"
Code:
<b>http://www.domain.ltd</b>
Hab' ich hier irgendwo einen Denkfehler oder irgendwas übersehen?
Antarctica
Grand Admiral Special
- Mitglied seit
- 11.09.2004
- Beiträge
- 2.444
- Renomée
- 34
- Standort
- Kupferstadt Stolberg
- Mein Laptop
- HP 625, V140, 4GB RAM, 32GB SSD, Ubuntu 15.04 (WT279EA)
- Prozessor
- Intel Core i5-4690, 4x 3.50GHz, boxed (BX80646I54690)
- Mainboard
- ASRock H97M Pro4 (90-MXGTA0-A0UAYZ)
- Kühlung
- Scythe Big Shuriken 2 Rev. B (SCBSK-2100)
- Speicher
- 2x Exceleram Black and White 8GB PC3-12800 DDR3-1600 Kit (EBW301A)
- Grafikprozessor
- Gigabyte GeForce GTX 750 Ti OC low profile, 2GB GDDR5, DVI, 2x HDMI, DisplayPort (GV-N75TOC-2GL)
- Display
- Samsung SyncMaster T24A350, 24" (LT24A350EW)
- SSD
- Samsung SSD 960 EVO 500GB, PCIe (MZ-V6E500BW)
- HDD
- 2x Seagate GoFlex Desk 3TB, USB 3.0 (STAC3000201/STAC3000202)
- Optisches Laufwerk
- Samsung SH-224BB schwarz, SATA, retail (SH-224BB/RSMS)
- Soundkarte
- on-board
- Gehäuse
- Inter-Tech IT-5908
- Netzteil
- be quiet! System Power S6 80Plus 300W ATX 2.2 (S6-SYS-UA-300W/BN080)
- Betriebssystem
- Microsoft: Windows 10 Pro 64Bit, DSP/SB (deutsch) (PC) (FQC-08922)
- Webbrowser
- Mozilla Firefox
Ja, du hast was übersehen. Und zwar, wenn der Parser deinen Programmcode auswertet, geht er von innen nach außen.
Das heißt, er packt \\1 in die Funktion grepurl hinein und setzt das Ergebnis in den String der decodetext() übergeben wird. Im Endeffekt hast du also, unabhängig davon, was Text enthält, immer folgendes in deinem Code stehen:
grepurl("\\1") evaluiert zu ""
womit die Funktion enthält
Was du willst ist "preg replace with eval", das heißt der e Modifier. Ohne Gewähr auf Richtigkeit:
Dadurch dass hier der Funktionsname im String drin steht, wird er erst zur Laufzeit geparst und nicht vorher. preg_replace setzt dann auch schon den richtigen Wert für \\1 ein.
Evtl. stimmen die anderen Modifier nicht, k.A., bin grad zu faul die alle nachzugucken.
Das heißt, er packt \\1 in die Funktion grepurl hinein und setzt das Ergebnis in den String der decodetext() übergeben wird. Im Endeffekt hast du also, unabhängig davon, was Text enthält, immer folgendes in deinem Code stehen:
grepurl("\\1") evaluiert zu ""
womit die Funktion enthält
Code:
$text = preg_replace("/\[a\](.*)\[\/a\]/siU","<a href=\"\" target=\"_blank\">\\1</a>",$text);
Was du willst ist "preg replace with eval", das heißt der e Modifier. Ohne Gewähr auf Richtigkeit:
Code:
function grepurl($url) {
preg_match("/(https?|ftps?):\/\/([a-z0-9%&\/=\?~#,\.\-_]+)/i",$url,$matches);
return $matches[0];
}
function bbcode_link($url) {
return "<a href=\"".grepurl($url)."\" target=\"_blank\">".$url."</a>";
}
function decodetext($text) {
$text = preg_replace("/\[a\](.*)\[\/a\]/siUe","bbcode_link(\\1)",$text);
return $text;
}
Dadurch dass hier der Funktionsname im String drin steht, wird er erst zur Laufzeit geparst und nicht vorher. preg_replace setzt dann auch schon den richtigen Wert für \\1 ein.
Evtl. stimmen die anderen Modifier nicht, k.A., bin grad zu faul die alle nachzugucken.
DEATHNET
Lieutnant
- Mitglied seit
- 05.02.2007
- Beiträge
- 75
- Renomée
- 0
- Mein Laptop
- HP ProBook 4530s
- Prozessor
- Intel Core i7-2700K @ 3,9GHz
- Mainboard
- ASUS P8Z68 DELUXE/GEN3
- Kühlung
- Scythe Rasetsu
- Speicher
- Corsair 8GB DDR3-1333 CL9 Dominator
- Grafikprozessor
- ASUS HD7970-DC2T-3GD5 GDDR5
- Display
- Acer V193L
- HDD
- Kingston HyperX SSD 120GB
- Optisches Laufwerk
- LG BluRay-Brenner BH10LS38
- Gehäuse
- Antec Three Hundred ATX
- Netzteil
- be quiet! Dark Power Pro P9 750W
- Betriebssystem
- Microsoft Windows 7 Home Premium 64bit
- Webbrowser
- Mozilla Firefox 14.0.1
ich glaube jetzt hab' ich es doch geschafft:
<!-- Kommentar zu meinem /e-Modifikator-Problem -->
das mit dem /e-Modifikator ist mir auch schon in den Sinn gekommen, aber wenn ich diesen angebe dann bekomme ich einen wunderschönen stderr serviert:
PHP:
function decodetext($text) {
$text = preg_replace("/\[a\](.*)\[\/a\]/esiU","grepurl('\\1')",$text);
return $text;
}
function grepurl($url) {
$title = $url;
preg_match("/(https?|ftps?):\/\/([a-z0-9%&\/=\?~#,\.\-_]+)/i",$url,$matches);
return "<a href=\"".$matches[0]."\" target=\"_blank\">".$title."</a>";
}
<!-- Kommentar zu meinem /e-Modifikator-Problem -->
das mit dem /e-Modifikator ist mir auch schon in den Sinn gekommen, aber wenn ich diesen angebe dann bekomme ich einen wunderschönen stderr serviert:
Code:
[Sat Sep 08 08:25:32 2012] [warn] [client 79.208.250.32] mod_fcgid: stderr: PHP Parse error: syntax error, unexpected '<' in /pub/www/diablo.gamers-planet.de/htdocs/lib/functions.php(38) : regexp code on line 1
[Sat Sep 08 08:25:32 2012] [warn] [client 79.208.250.32] mod_fcgid: stderr: PHP Fatal error: preg_replace(): Failed evaluating code:
[Sat Sep 08 08:25:32 2012] [warn] [client 79.208.250.32] mod_fcgid: stderr: <a href="0" target="_blank">[b]http://diablo.gamers-planet.de[/b]</a> in /pub/www/diablo.gamers-planet.de/htdocs/lib/functions.php on line 38
PHP:
$text = preg_replace("/\[a\](.*)\[\/a\]/esiU","<a href=\"".grepurl("\\1")."\" target=\"_blank\">\\1</a>",$text);
Zuletzt bearbeitet:
Antarctica
Grand Admiral Special
- Mitglied seit
- 11.09.2004
- Beiträge
- 2.444
- Renomée
- 34
- Standort
- Kupferstadt Stolberg
- Mein Laptop
- HP 625, V140, 4GB RAM, 32GB SSD, Ubuntu 15.04 (WT279EA)
- Prozessor
- Intel Core i5-4690, 4x 3.50GHz, boxed (BX80646I54690)
- Mainboard
- ASRock H97M Pro4 (90-MXGTA0-A0UAYZ)
- Kühlung
- Scythe Big Shuriken 2 Rev. B (SCBSK-2100)
- Speicher
- 2x Exceleram Black and White 8GB PC3-12800 DDR3-1600 Kit (EBW301A)
- Grafikprozessor
- Gigabyte GeForce GTX 750 Ti OC low profile, 2GB GDDR5, DVI, 2x HDMI, DisplayPort (GV-N75TOC-2GL)
- Display
- Samsung SyncMaster T24A350, 24" (LT24A350EW)
- SSD
- Samsung SSD 960 EVO 500GB, PCIe (MZ-V6E500BW)
- HDD
- 2x Seagate GoFlex Desk 3TB, USB 3.0 (STAC3000201/STAC3000202)
- Optisches Laufwerk
- Samsung SH-224BB schwarz, SATA, retail (SH-224BB/RSMS)
- Soundkarte
- on-board
- Gehäuse
- Inter-Tech IT-5908
- Netzteil
- be quiet! System Power S6 80Plus 300W ATX 2.2 (S6-SYS-UA-300W/BN080)
- Betriebssystem
- Microsoft: Windows 10 Pro 64Bit, DSP/SB (deutsch) (PC) (FQC-08922)
- Webbrowser
- Mozilla Firefox
Weil der e-Modifikator besagt, dass die "Ersetzung" kein normaler String ist, sondern der Rückgabewert des im String stehenden Funktionsaufrufs.das mit dem /e-Modifikator ist mir auch schon in den Sinn gekommen, aber wenn ich diesen angebe dann bekomme ich einen wunderschönen stderr serviert:
DEATHNET
Lieutnant
- Mitglied seit
- 05.02.2007
- Beiträge
- 75
- Renomée
- 0
- Mein Laptop
- HP ProBook 4530s
- Prozessor
- Intel Core i7-2700K @ 3,9GHz
- Mainboard
- ASUS P8Z68 DELUXE/GEN3
- Kühlung
- Scythe Rasetsu
- Speicher
- Corsair 8GB DDR3-1333 CL9 Dominator
- Grafikprozessor
- ASUS HD7970-DC2T-3GD5 GDDR5
- Display
- Acer V193L
- HDD
- Kingston HyperX SSD 120GB
- Optisches Laufwerk
- LG BluRay-Brenner BH10LS38
- Gehäuse
- Antec Three Hundred ATX
- Netzteil
- be quiet! Dark Power Pro P9 750W
- Betriebssystem
- Microsoft Windows 7 Home Premium 64bit
- Webbrowser
- Mozilla Firefox 14.0.1
soweit hab ich das schon überrissen
allerdings stell ich mir nach wie vor die frage warum bei angegebenen Pattern:
zurück gegeben wird und nicht nur die gefilterte domain...
allerdings stell ich mir nach wie vor die frage warum bei angegebenen Pattern:
PHP:
"/(.*)/"
Code:
<b>http://www.domain.ltd</b>
DEATHNET
Lieutnant
- Mitglied seit
- 05.02.2007
- Beiträge
- 75
- Renomée
- 0
- Mein Laptop
- HP ProBook 4530s
- Prozessor
- Intel Core i7-2700K @ 3,9GHz
- Mainboard
- ASUS P8Z68 DELUXE/GEN3
- Kühlung
- Scythe Rasetsu
- Speicher
- Corsair 8GB DDR3-1333 CL9 Dominator
- Grafikprozessor
- ASUS HD7970-DC2T-3GD5 GDDR5
- Display
- Acer V193L
- HDD
- Kingston HyperX SSD 120GB
- Optisches Laufwerk
- LG BluRay-Brenner BH10LS38
- Gehäuse
- Antec Three Hundred ATX
- Netzteil
- be quiet! Dark Power Pro P9 750W
- Betriebssystem
- Microsoft Windows 7 Home Premium 64bit
- Webbrowser
- Mozilla Firefox 14.0.1
Warum sollte er was anderes zurückliefern? "." matcht jedes Zeichen, also nimmt er alles was er kriegen kann. Der reguläre Ausdruck sollte also den kompletten String speichern, den du reingibst.
Gruß,
Max
das ist mir schon klar. drum wundere ich mich ja warum er den string dann nicht filtert wenn ich einen pattern angebe sondern NULL zurückgibt. siehe auch den anfangspost...
Antarctica
Grand Admiral Special
- Mitglied seit
- 11.09.2004
- Beiträge
- 2.444
- Renomée
- 34
- Standort
- Kupferstadt Stolberg
- Mein Laptop
- HP 625, V140, 4GB RAM, 32GB SSD, Ubuntu 15.04 (WT279EA)
- Prozessor
- Intel Core i5-4690, 4x 3.50GHz, boxed (BX80646I54690)
- Mainboard
- ASRock H97M Pro4 (90-MXGTA0-A0UAYZ)
- Kühlung
- Scythe Big Shuriken 2 Rev. B (SCBSK-2100)
- Speicher
- 2x Exceleram Black and White 8GB PC3-12800 DDR3-1600 Kit (EBW301A)
- Grafikprozessor
- Gigabyte GeForce GTX 750 Ti OC low profile, 2GB GDDR5, DVI, 2x HDMI, DisplayPort (GV-N75TOC-2GL)
- Display
- Samsung SyncMaster T24A350, 24" (LT24A350EW)
- SSD
- Samsung SSD 960 EVO 500GB, PCIe (MZ-V6E500BW)
- HDD
- 2x Seagate GoFlex Desk 3TB, USB 3.0 (STAC3000201/STAC3000202)
- Optisches Laufwerk
- Samsung SH-224BB schwarz, SATA, retail (SH-224BB/RSMS)
- Soundkarte
- on-board
- Gehäuse
- Inter-Tech IT-5908
- Netzteil
- be quiet! System Power S6 80Plus 300W ATX 2.2 (S6-SYS-UA-300W/BN080)
- Betriebssystem
- Microsoft: Windows 10 Pro 64Bit, DSP/SB (deutsch) (PC) (FQC-08922)
- Webbrowser
- Mozilla Firefox
Ich zitiere mich nur ungern, aber:
grepurl("\\1") evaluiert zu ""
DEATHNET
Lieutnant
- Mitglied seit
- 05.02.2007
- Beiträge
- 75
- Renomée
- 0
- Mein Laptop
- HP ProBook 4530s
- Prozessor
- Intel Core i7-2700K @ 3,9GHz
- Mainboard
- ASUS P8Z68 DELUXE/GEN3
- Kühlung
- Scythe Rasetsu
- Speicher
- Corsair 8GB DDR3-1333 CL9 Dominator
- Grafikprozessor
- ASUS HD7970-DC2T-3GD5 GDDR5
- Display
- Acer V193L
- HDD
- Kingston HyperX SSD 120GB
- Optisches Laufwerk
- LG BluRay-Brenner BH10LS38
- Gehäuse
- Antec Three Hundred ATX
- Netzteil
- be quiet! Dark Power Pro P9 750W
- Betriebssystem
- Microsoft Windows 7 Home Premium 64bit
- Webbrowser
- Mozilla Firefox 14.0.1
scheinbar versteht ihr meine Denkweise nicht
aber egal, damit funktioniert es jedenfalls, warum auch immer:
p.s. danke trotzdem für die hilfestellung!
aber egal, damit funktioniert es jedenfalls, warum auch immer:
PHP:
function decodetext($text) {
$text = preg_replace("/\[a\](.*)\[\/a\]/esiU","makelink('\\1')",$text);
$text = preg_replace("/\[a=(.*)\](.*)\[\/a\]/esiU","makelink('\\1','\\2')",$text);
$text = preg_replace("/\[b\](.*)\[\/b\]/siU","<b>\\1</b>",$text);
$text = preg_replace("/\[i\](.*)\[\/i\]/siU","<i>\\1</i>",$text);
$text = preg_replace("/\[u\](.*)\[\/u\]/siU","<u>\\1</u>",$text);
$text = nl2br($text);
return $text;
}
function makelink($url,$title = "") {
if (empty($title)) $title = $url;
if (strlen($title) > 50) $title = substr($title,0,25)."...".substr($title,-25);
preg_match("/(https?|ftps?):\/\/[^ \[\]<>]+/i",$url,$matches);
return "<a href=\"".$matches[0]."\" target=\"_blank\" rel=\"nofollow\">".$title."</a>";
}
p.s. danke trotzdem für die hilfestellung!
Antarctica
Grand Admiral Special
- Mitglied seit
- 11.09.2004
- Beiträge
- 2.444
- Renomée
- 34
- Standort
- Kupferstadt Stolberg
- Mein Laptop
- HP 625, V140, 4GB RAM, 32GB SSD, Ubuntu 15.04 (WT279EA)
- Prozessor
- Intel Core i5-4690, 4x 3.50GHz, boxed (BX80646I54690)
- Mainboard
- ASRock H97M Pro4 (90-MXGTA0-A0UAYZ)
- Kühlung
- Scythe Big Shuriken 2 Rev. B (SCBSK-2100)
- Speicher
- 2x Exceleram Black and White 8GB PC3-12800 DDR3-1600 Kit (EBW301A)
- Grafikprozessor
- Gigabyte GeForce GTX 750 Ti OC low profile, 2GB GDDR5, DVI, 2x HDMI, DisplayPort (GV-N75TOC-2GL)
- Display
- Samsung SyncMaster T24A350, 24" (LT24A350EW)
- SSD
- Samsung SSD 960 EVO 500GB, PCIe (MZ-V6E500BW)
- HDD
- 2x Seagate GoFlex Desk 3TB, USB 3.0 (STAC3000201/STAC3000202)
- Optisches Laufwerk
- Samsung SH-224BB schwarz, SATA, retail (SH-224BB/RSMS)
- Soundkarte
- on-board
- Gehäuse
- Inter-Tech IT-5908
- Netzteil
- be quiet! System Power S6 80Plus 300W ATX 2.2 (S6-SYS-UA-300W/BN080)
- Betriebssystem
- Microsoft: Windows 10 Pro 64Bit, DSP/SB (deutsch) (PC) (FQC-08922)
- Webbrowser
- Mozilla Firefox
Weil sie nicht logisch ist.scheinbar versteht ihr meine Denkweise nicht
Wir sind Programmierer, wir denken nicht outside the box.
DEATHNET
Lieutnant
- Mitglied seit
- 05.02.2007
- Beiträge
- 75
- Renomée
- 0
- Mein Laptop
- HP ProBook 4530s
- Prozessor
- Intel Core i7-2700K @ 3,9GHz
- Mainboard
- ASUS P8Z68 DELUXE/GEN3
- Kühlung
- Scythe Rasetsu
- Speicher
- Corsair 8GB DDR3-1333 CL9 Dominator
- Grafikprozessor
- ASUS HD7970-DC2T-3GD5 GDDR5
- Display
- Acer V193L
- HDD
- Kingston HyperX SSD 120GB
- Optisches Laufwerk
- LG BluRay-Brenner BH10LS38
- Gehäuse
- Antec Three Hundred ATX
- Netzteil
- be quiet! Dark Power Pro P9 750W
- Betriebssystem
- Microsoft Windows 7 Home Premium 64bit
- Webbrowser
- Mozilla Firefox 14.0.1
könnte auch daran liegen das ihr schon wisst warum es nur so funktionieren kann
ich hingegen muss (und will) es noch lernen und frage mich daher warum es nur so funktioniert, und nicht anders...
ich hingegen muss (und will) es noch lernen und frage mich daher warum es nur so funktioniert, und nicht anders...
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 192
- Antworten
- 0
- Aufrufe
- 400
- Antworten
- 0
- Aufrufe
- 360
- Antworten
- 0
- Aufrufe
- 348