ugrás a tartalomhoz

php regex a következő szóra

sandrosdj · 2012. Ápr. 23. (H), 14.34
Üdv!

Hogyan vagy milyen regex-el oldanátok meg, hogy egy szó előtt közvetlen lévő szögletes zárójelbe írt szöveg a következő szó magyarázószövege legyen?

Hogy jobban érthető legyen mit akarok:

Beírt szöveg:
A következő cikk bemutatja a [Elektromos motor, stbstbstb]villanymotor működését.
Az eredmény:
A következő cikk bemutatja a <span title="Elektromos motor, stbstbstb">villanymotor</span> működését.
 
1

$szoveg =

kuka · 2012. Ápr. 23. (H), 14.44

$szoveg = preg_replace('/\[(.+?)\](\w+)/', '<span title="$1">$2</span>', $szoveg);
2

Ez visszaadja ugyan azt, amit

sandrosdj · 2012. Ápr. 23. (H), 14.50
Ez visszaadja ugyan azt, amit megadtam szövegnek.
3

Interactive shell php >

kuka · 2012. Ápr. 23. (H), 15.00
Interactive shell

php > $szoveg = 'A következő cikk bemutatja a [Elektromos motor, stbstbstb]villanymotor működését.';
php > echo preg_replace('/\[(.+?)\](\w+)/', '<span title="$1">$2</span>', $szoveg);
A következő cikk bemutatja a <span title="Elektromos motor, stbstbstb">villanymotor</span> működését.
4

Épp most néztem én is,

sandrosdj · 2012. Ápr. 23. (H), 15.08
Épp most néztem én is, véletlenül pontosvesszőt tettem a szó elé. Köszönöm a megoldást!
5

Mit kell még a következő

sandrosdj · 2012. Ápr. 23. (H), 15.34
Mit kell még a következő feltételekhez írni, hogy engedve legyen a : és /?

[a-zA-Z0-9_-]*
6

Mit kell még a következő

kuka · 2012. Ápr. 23. (H), 16.01
Mit kell még a következő feltételekhez írni, hogy engedve legyen a : és /?
Hol? A szóban vagy a magyarázatban? Mert szerintem egyikük esetében sem lehetne hossz 0.

Egyébként pont azt amit engedélyezni akarsz: [a-zA-Z0-9_:/-]* . Persze ha a törtvonal még mindig kifejezés határoló, akkor kell eléje egy fordított törtvonal. De én inkább úgy írnám, hogy [\w:/-]+ .
7

Tényleg, a hosszra még nem is

sandrosdj · 2012. Ápr. 23. (H), 16.08
Tényleg, a hosszra még nem is gondoltam..

A magyarázathoz kellett.

Köszi!
8

A magyarázathoz kellett.Akkor

kuka · 2012. Ápr. 23. (H), 16.10
A magyarázathoz kellett.
Akkor gondolom kellene bele szóköz is meg pár írásjel. Bár nem látom okát az eredeti .+? mellőzésének.
9

További kérdés: Hogyan

sandrosdj · 2012. Ápr. 24. (K), 16.03
További kérdés: Hogyan lehetne megoldani, hogy egy változó értékére cserélje, amit kapcsos zárójelekbe írok?

Valahol a php-ben:
<?php $locale["login"]="Belépés"; ?>
Eredeti tartalom:
<input type="submit" value="{locale:login}"/>
Kimenet:
<input type="submit" value="Belépés"/>
...és ha nincs ilyen a tömbben adja vissza, amit beírt, tehát:
<input type="submit" value="{locale:login}"/>
10

Ezen a ponton lehet el

kuka · 2012. Ápr. 24. (K), 16.14
Ezen a ponton lehet el kellene gondolkozz egy sablon rendszer használatán.

$szoveg = preg_replace_callback('/\{(.+?)\}/', 'valtozo_csere', $szoveg);

function valtozo_csere($adat)
{
  $szerkezet = &$GLOBALS;
  foreach (explode(':', $adat[1]) as $darab) {
    if (!array_key_exists($darab, $szerkezet)) return $adat[0];
    $szerkezet = &$szerkezet[$darab];
  }
  return $szerkezet;
}
11

Köszi, én ilyesmit próbáltam,

sandrosdj · 2012. Ápr. 24. (K), 16.37
Köszi, én ilyesmit próbáltam, esetleg ebből ki lehet hozni valamit?
$regex[] = '#{([a-zA-Z]*)}#';
$reple[] = ${"locale[$1]"};
$regex az első és $reple a második paramétere a preg_replace-nek.
14

Talán az e flaggel:$szoveg =

kuka · 2012. Ápr. 24. (K), 17.18
Talán az e flaggel:

$szoveg = '<input type="submit" value="{login}"/>';

$locale["login"]="Belépés";

$regex[] = '#\{([a-zA-Z]+)\}#e';
$reple[] = '$locale[\\1]';

$szoveg = preg_replace($regex, $reple, $szoveg);
De ez így már kezd elhúzni a marhaság irányába. Főleg, hogy Drupalék szerint (is) Do not use /e in preg_replace() - use preg_replace_callback() instead. Akkor viszont oda jutunk amit korábban írtam.
15

Erre egy ilyet kapok: Notice:

sandrosdj · 2012. Ápr. 24. (K), 17.27
Erre egy ilyet kapok:
Notice: Use of undefined constant login - assumed 'login' in /home/sandros/wwwroot/php/preg_replace.php(311) : regexp code on line 1
16

Hát akkor rakj idézőjelet a

kuka · 2012. Ápr. 24. (K), 17.34
Hát akkor rakj idézőjelet a \\1 köré.
17

Igaz-igaz.. Köszönöm a

sandrosdj · 2012. Ápr. 24. (K), 17.37
Igaz-igaz.. Köszönöm a segítséget ebben is! :)

Ha lesz hozzá hangulatom, akkor lehet áttérek a ..._callback használatára.
12

PHP

Poetro · 2012. Ápr. 24. (K), 16.40
Vagy miért nem használsz eleve PHP-t a template-ben?
<input type="submit" value="<?=$locale['login'];?>"/>
13

A html-es tartalom

sandrosdj · 2012. Ápr. 24. (K), 17.07
A html-es tartalom adatbázisban van és utólag preg_replace-el alakítanám vissza..
A miértjei: kevesebb helyet foglal adatbázisban, csak a nyelvet tartalmazó változókhoz ad hozzáférést.
18

Mekkora?

janoszen · 2012. Ápr. 24. (K), 22.49
Mekkora adatbázismérettel dolgozl, hogy ez lényeges legyen?