Diskuze: Regulární výrazy & preg_replace
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ale nejsem si jist, jestli tohle je presne co potrebujes
<?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;
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;
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.
# (^|\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
])*)
[+[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.
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...
Díky!
Tohle jsem trochu upravil a funguje to!
preg_replace("~\\[([^\\]]*)\\]~", "$1.domena.cz", $str);
Zobrazeno 8 zpráv z 8.