Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
Martin Plesh
Člen
Avatar
Martin Plesh:13.12.2018 20:09

Ahoj, regulární výrazy nejsou zrovna mojí silnou stránkou a potřeboval bych poradit.

Zkusil jsem:

$source = "[dosbox] [download] [shop]";

$source = Preg_Replace('#(^|\s)([+[a-z0-9_-]+])*)#is', '\\1<a href="http://\\2.domena.cz">\\2</a>', $source);

echo $source;

Chci docílit: $source jsou subdomény mého webu a chtěl bych pomocí Preg_Replace, aby výsledek vypadal takto:

<a href="http://dosbox.domena.cz">[dosbox]</a>
<a href="http://download.domena.cz">[download]</a>
<a href="http://shop.domena.cz">[shop]</a>
Odpovědět 13.12.2018 20:09
Když nejde o život, tak o ho*no jde.
Avatar
Šimon Raichl
Překladatel
Avatar
Odpovídá na Martin Plesh
Šimon Raichl:13.12.2018 22:19

Ale nejsem si jist, jestli tohle je presne co potrebujes :D

<?php
$sourceArray = explode(" ", "[dosbox] [download] [shop]");
$finalSource = "";
foreach($sourceArray as $source) {
    $finalSource = $finalSource . '<a href="http://' . preg_replace("/[[\]]/", "", $source) .'.domena.cz">' . $source . '</a>';
}

echo $finalSource;
 
Nahoru Odpovědět  +1 13.12.2018 22:19
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.12.2018 7:47
http://php.net/manual/en/function.preg-replace-callback.php

function next_year($matches)
    {
    $arr = array(
        'dosbox' => '...'
        );
    return isset($arr[$matches[1]]) ? $arr[$matches[1]] : $matches[0];
    }
$str = "[dosbox] [download] [shop]";
echo preg_replace_callback(
            "~\\[([^\\]]*)\\]~", // "~\\[([^\]]*)\\]~s",
            "next_year",
            $str);

---

preg_replace("~\\[([^\\]]*)\\]~", "$1.domena.cz", $str);

---

http://php.net/manual/en/function.str-replace.php
Example #2 Examples of potential str_replace() gotchas

$letters = array('a', 'p');
$fruit   = array('apple', 'pear');
$text    = 'a p';
$output  = str_replace($letters, $fruit, $text);
echo $output;
Editováno 14.12.2018 7:50
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 14.12.2018 7:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.12.2018 7:55
http://php.net/manual/en/function.preg-replace.php

Example #2 Using indexed arrays with preg_replace()
$string = 'The quick brown fox jumps over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);

---

 rob at ubrio dot us 11 years ago

$subs = array(
  '/\[b\](.+)\[\/b\]/Ui' => '<strong>$1</strong>',
  '/_(.+)_/Ui' => '<em>$1</em>'
  ...
  ...
);

$raw_text = '[b]this is bold[/b] and this is _italic!_';

$bb_text = preg_replace(array_keys($subs), array_values($subs), $raw_text);

---

 da_pimp2004_966 at hotmail dot com 10 years ago

function AddBB($var) {
        $search = array(
                '/\[b\](.*?)\[\/b\]/is',
                '/\[i\](.*?)\[\/i\]/is',
                '/\[u\](.*?)\[\/u\]/is',
                '/\[img\](.*?)\[\/img\]/is',
                '/\[url\](.*?)\[\/url\]/is',
                '/\[url\=(.*?)\](.*?)\[\/url\]/is'
                );

        $replace = array(
                '<strong>$1</strong>',
                '<em>$1</em>',
                '<u>$1</u>',
                '<img src="$1" />',
                '<a href="$1">$1</a>',
                '<a href="$1">$2</a>'
                );

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

To je skoro vsechno primo ze stranek dokumentace k te funkci. Musel jsi to prehlednout.

Editováno 14.12.2018 7:56
 
Nahoru Odpovědět 14.12.2018 7:55
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.12.2018 10:36
 # (^|\s)([+[a-z0-9_-]+])*) # is
^ | \s = zacatek $str nebo mezera - ok
pak tam mas nejaky podivny pocet zavorek ( ... ) * )
pak tam mas podivny pocet hranatych zavorek
[znaky] - je seznam znaku
[+[a-z0-9_-] - je seznam znaku a to: + or [ or a-z or 0-9 or _ or -
a dal tam mas prave nesmysl, ktery nedava smysl, zavorky v jakemsi nesmyslnem poradi
])*)
Editováno 14.12.2018 10:36
 
Nahoru Odpovědět 14.12.2018 10:36
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.12.2018 10:43
[+[a-z0-9_-] - jakoze hrana zavorka uvnitr otevrene hranate je pripustna, cili, takto je to platny vyraz
[+[a-z0-9_-]+] - ale takhle je to nesmysl, je to chapano takto ( +[a-z0-9_- )+ ]
Pokud tam chces dat skutecne zavorku, musi to byt s lomitkem nebo se dvema a nebo v zavorce
\[ nebo \\[ nebo [[] (to posledni, zavorka v otevrene hranate je pripustna, ale opacna uz ne, protoze ta zavorku uzavira)
\] nebo \\] nebo ] (to posledni je vyjimecny pripad)

\[ a \] je take vyjimecny pripad. Jestli to funguje zalezi tusim na pouzitych uvozovkach ' a ". Kdezto se dvema \\ by to melo fungovat vzdy.
Editováno 14.12.2018 10:45
 
Nahoru Odpovědět 14.12.2018 10:43
Avatar
Martin Plesh
Člen
Avatar
Odpovídá na Šimon Raichl
Martin Plesh:17.12.2018 12:49

Díky moc za radu. Zkoušel jsem to aplikovat a funguje to, ale není to úplně ono. Vkládám to do komplexnějšího PHP kódu a tam už to nedělá to, co potřebuji. Každopádně si moc vážím tvé rady a jsem rád za tvojí pomoc. Ještě jednou díky...

Nahoru Odpovědět 17.12.2018 12:49
Když nejde o život, tak o ho*no jde.
Avatar
Martin Plesh
Člen
Avatar
Odpovídá na Peter Mlich
Martin Plesh:17.12.2018 12:55

Díky!
Tohle jsem trochu upravil a funguje to!

preg_replace("~\\[([^\\]]*)\\]~", "$1.domena.cz", $str);
Nahoru Odpovědět 17.12.2018 12:55
Když nejde o život, tak o ho*no jde.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.