Avatar billede palito Nybegynder
30. juli 2006 - 14:30 Der er 12 kommentarer og
1 løsning

Smelte to regulære udtryk sammen2

Kan disse to regulære udtryk smeltes sammen til et?

$string = preg_replace( "#\^(\d)#i", "<sup>\\1</sup>", $string );
$string = preg_replace( "#\_(\d)#i", "<sub>\\1</sub>", $string );
Avatar billede nielle Nybegynder
30. juli 2006 - 14:40 #1
F.eks. sådan:

$string = preg_replace( "#\(?:^|_)(\d)#i", "<sub>\\1</sub>", $string );
Avatar billede palito Nybegynder
30. juli 2006 - 14:58 #2
Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 7
Avatar billede nielle Nybegynder
30. juli 2006 - 15:04 #3
Hmmm? Hvad laver den \ foran ^-tegnet og _-tegnet? Er det dikke en fejl at den er der i de oprindelige udtryk?
Avatar billede nielle Nybegynder
30. juli 2006 - 15:12 #4
Normalt bruges \ til at escape. Et ^-tegn kan godt have brug for en escape, hvis men ikke vil have at den fortolkes som "start af linjen" ankeret.

Men det kan et _ nu ikke - dette tegn har ingen speciel mening i et regulært udtryk. Der er enten noget galt med den sidste, eller også er der et \-tegn for meget i begge to.
Avatar billede palito Nybegynder
30. juli 2006 - 15:38 #5
Jeg kan forkorte dem således:


$string = preg_replace( "#\^(\d)#", "<sup>\\1</sup>", $string );
$string = preg_replace( "#_(\d)#", "<sub>\\1</sub>", $string );
Avatar billede nielle Nybegynder
30. juli 2006 - 15:40 #6
Sådan:

$string = preg_replace( "#(?:\^|_)(\d)#", "<sub>\\1</sub>", $string );
Avatar billede palito Nybegynder
30. juli 2006 - 15:51 #7
jeg tror du har misforstået det :D

man skal både kunne løfte og sænke tallene ;)
Avatar billede nielle Nybegynder
30. juli 2006 - 15:55 #8
Ahh, ok jeg havde ikke set at der var forskel på plads nr. 2. :^|

Ok, de kan godt kombineres, men det beliver altså ikke til færre linjer kode (og så er der jo ikke så meget ved det).
Avatar billede erikjacobsen Ekspert
30. juli 2006 - 15:56 #9
Hvad med

$string = preg_replace(Array("#\^(\d)#", "#_(\d)#"), Array("<sup>\\1</sup>","<sub>\\1</sub>"), $string );
Avatar billede nielle Nybegynder
30. juli 2006 - 15:57 #10
$from = ("#\^(\d)#", "#_(\d)#");
$to = ("<sup>\\1</sup>", "<sub>\\1</sub>");
string = preg_replace($from, $to, $string);
Avatar billede palito Nybegynder
30. juli 2006 - 16:15 #11
ok. så er det ligemget ;)

smid svar erikjacobsen og nielle
Avatar billede nielle Nybegynder
30. juli 2006 - 16:16 #12
Svar :^)
Avatar billede erikjacobsen Ekspert
30. juli 2006 - 16:26 #13
Nej tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester