webForumDet fria alternativet

Hjälp med REGEXP-uttryck

Webbutveckling

34 svar · 1 471 visningar · startad av lillebror · sida 2 av 2

Frågan, av lillebror

Hej! Behöver lite hjälp med ett uttryck då jag själv inte är en mästare på detta! Koden som jag vill ska detekteras är följande: VÄNSTERKLAMMERCITAT=username]Text Text[/CITATHÖGERKLAMMER Denna kod vill jag ska ersättas med: <table style="margin-left: 10px;"> <tr> <td>Username skrev:<br /><hr>Text Text<br /><hr></td> </tr> </table> Några idéer? :)

Läs frågan i sin helhet →
Medlem sedan apr. 20041 597 inlägg
#21

Kom på en sak till. Förut hade jag det så att själva texten som var citerad var blågrön, precis som på wF. Nu försökte jag få det att fungera med koden nedan:

$replace[] = "<table style=\"margin: 5px 15px 5px 20px; width: 93%\"><tr><td><span style=\"font-weight: bold; font-size: 10px;\">$1</span> <span style=\"font-size: 10px;\">skrev:<br /><hr>";
$replace[] = "[B]<span style=\"color: #00965c;\">$2</span>[/B]<br /><hr></td></tr></table>";

Den fetmarkerade texten var något som jag klippte in själv från den tidigare variant jag hade av citat-funktionen. Detta fanns inte med i ditt exempel. Hur som helst fungerar inte färgkodningen. Variablen $2 försvann i ditt nuvarande exempel. Förmodligen av någon anledning som jag inte riktigt har koll på :) Jag kanske inte kan klippa in den hux flux som jag gjort i en av $replace-arrayerna?

Medlem sedan aug. 20002 975 inlägg
#22

Testa med:

$replace[] = "<div style=\"margin: 5px 15px 5px 20px; width: 93%; color:#00965c;\"><span style=\"font-weight: bold; font-size: 10px;\">$1 skrev:</span><hr />";
$replace[] = "<hr /></div>";
Medlem sedan apr. 20041 597 inlägg
#23

Var skulle jag kunna placera en span-tag med färkodning för den citerade texten?

Medlem sedan aug. 20002 975 inlägg
#24

I och med att du lagt färgkodningen i din div behöver du ingen span-tagg.

Medlem sedan apr. 20041 597 inlägg
#25

Matte skrev:

Snarare något i stil med:

$pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is");

$replace[] = "
  <table style=\"margin-left: 10px;\">
  <tr>
  <td>$1 skrev:<br /><hr>
";
$replace[] = "
  <br /><hr></td>
  </tr>
  </table>
";

$text = preg_replace($pattern, $replace, $text);

Det var ett tag sedan denna tråd fick sin lösning. Dock kom jag på en liten sak som skulle va intressant att ha med och det är när (vilken tidpunkt) den citerade personen ursprungligen gjorde sitt inlägg. Det tycker jag kan vara bra om det är text som citeras flera gånger.

Det fetmarkerade är det jag skulle vilja få med i uttrycket.

$pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is");

$replace[] = "
  <table style=\"margin-left: 10px;\">
  <tr>
  <td>$1 skrev [B]@ 2005-09-25 22:30[/B]:<br /><hr>
";
$replace[] = "
  <br /><hr></td>
  </tr>
  </table>
";

Hur "bakar" man in det som är fetstilt i $pattern så att man i replace kan få ut datumet i exempelvis variabeln $2? :) Det kanske fungerar att "klistra in" datumet i citat-klammern på följande sätt:

Username=2005-09-25 22:20 skrev:

?

Medlem sedan dec. 20025 483 inlägg
#26
array("/\[citat=([^=]+)=([^\]]+)]/is", "/\[\/citat]/is");

<td>$1 skrev @ $2:<br /><hr>

Tänk på att det kan bli problem om användaren har ett '='-tecken i sitt användarnamn (eftersom det tecknet används som avskiljare).

Medlem sedan apr. 20041 597 inlägg
#27

Peter S skrev:

Tänk på att det kan bli problem om användaren har ett '='-tecken i sitt användarnamn (eftersom det tecknet används som avskiljare).

Bra poäng där. Kanske får klura på ett annat tecken istället!

Tack för att du hjälpte mig med uttrycket! :) Jag borde verkligen lära mig REGEXP. Mar har stor nytta av det!

Btw, är det =-tecknet efter ^-tecknet som jag byter ut mot det tecken jag finner lämpligt?

Medlem sedan dec. 20025 483 inlägg
#28

Ja, ibland är det ovärderligt. Det kan vara litet klurigt att få till uttrycken, men klurigheter gillar vi :)

Medlem sedan apr. 20041 597 inlägg
#29

Hehe...helt rätt!

Tacksamheten går inte att beskriva i ord! :)

Medlem sedan dec. 20025 483 inlägg
#30

lillebror skrev:

Btw, är det =-tecknet efter ^-tecknet som jag byter ut mot det tecken jag finner lämpligt?

Ja, båda förekomsterna faktiskt.

Medlem sedan apr. 20041 597 inlägg
#31

Det fungerar som det ska så när som på att jag får ett extra "?" framför datumet jag skriver ut? Vad kommer det ifrån?

Citat-hakparantesen ser ut så här:

<? echo $RSobj_citera['username' skrev:

; ?>?<? echo $RSobj_citera['posted']; ?>]<?php echo $RSobj_citera['content']; ?>

Nu blir det ju helkocko i wF eftersom det använder sig av dessa citat också :e

Medlem sedan dec. 20025 483 inlägg
#32

Med de ändringar jag gjorde, får jag inga extra frågetecken före datumet.

Testkod:

<?
$text = $_POST["foo"];

$pattern = array("/\[citat=([^=]+)=([^\]]+)]/is", "/\[\/citat]/is");

$replace[] = "
  <table style=\"margin-left: 10px;\">
  <tr>
  <td>$1 skrev @ $2:<br /><hr>
";
$replace[] = "
  <br /><hr></td>
  </tr>
  </table>
";

$text = preg_replace($pattern, $replace, $text);

echo $text;
?>

<form method="post">
    <textarea name="foo"></textarea>
    <input type="submit">
</form>
Medlem sedan apr. 20041 597 inlägg
#33

Jag fick problem med satte in frågetecken istället för =-tecken för de två sista...nu när jag bytte tillbaka till "=" så funderade det...

Apropå det du sa förut tänkte jag att skulle ha ett annat tecken istället för "=".

Medlem sedan dec. 20025 483 inlägg
#34

Frågetecken har speciell betydelse i reguljära uttryck. Vill du använda det måste du escape:a:

$pattern = array("/\[citat=([^\?]+)\?([^\]]+)]/is", "/\[\/citat]/is");
Medlem sedan apr. 20041 597 inlägg
#35

Gut! :)

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)