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:
  1. A következő cikk bemutatja a [Elektromos motor, stbstbstb]villanymotor működését.  
Az eredmény:
  1. 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
  1. $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:
  1. <?php $locale["login"]="Belépés"; ?>  
Eredeti tartalom:
  1. <input type="submit" value="{locale:login}"/>  
Kimenet:
  1. <input type="submit" value="Belépés"/>  
...és ha nincs ilyen a tömbben adja vissza, amit beírt, tehát:
  1. <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.
  1. $szoveg = preg_replace_callback('/\{(.+?)\}/''valtozo_csere'$szoveg);  
  2.   
  3. function valtozo_csere($adat)  
  4. {  
  5.   $szerkezet = &$GLOBALS;  
  6.   foreach (explode(':'$adat[1]) as $darab) {  
  7.     if (!array_key_exists($darab$szerkezet)) return $adat[0];  
  8.     $szerkezet = &$szerkezet[$darab];  
  9.   }  
  10.   return $szerkezet;  
  11. }  
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?
  1. $regex[] = '#{([a-zA-Z]*)}#';  
  2. $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:
  1. $szoveg = '<input type="submit" value="{login}"/>';  
  2.   
  3. $locale["login"]="Belépés";  
  4.   
  5. $regex[] = '#\{([a-zA-Z]+)\}#e';  
  6. $reple[] = '$locale[\\1]';  
  7.   
  8. $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?
  1. <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?