/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
regexp: finde ' men ej \'
Fra : Frowning Freezer


Dato : 16-02-04 12:11

Hejsa

Jeg er ved at lave en regular expression som skal finde single quotes
(') i en string, men kun hvis de ikke har en backslash (\) før sig
selv. De matches skal så erstattes af: \'

Jeg ville mene at følgende pattern og replacement ville gøre det, men
det fejlter:

$pattern = "/([^\\])\'/"; //find with no preceding slash: '
$replacement = "$1\\\'"; //replace with: \'
$value = preg_replace($pattern, $replacement, $value);

Men den kommer med denne fejl:

Compilation failed: missing terminating ] for character class at
offset 8

Forklaring til pattern:
- parantesen gør at jeg ikke fjerner det tegn der er før single quote,
men at jeg kan genindsætte det tegn i replacement string.
- 2 backslashes i character range for at escape den backslash jeg ikke
vil matche.
- hvis jeg tilføjer endnu en afsluttende bracket (]) efter den første
fejler scriptet ikke, men så undlader det heller ikke matches af
single quotes med foranstillet backslash. Og der skal jo heller ikke
være 2 afsluttende brackets!

Så jeg mangler lidt hjælp. På forhånd tak.


 
 
Frowning Freezer (16-02-2004)
Kommentar
Fra : Frowning Freezer


Dato : 16-02-04 12:57

Nå, jeg fandt fejlen - der manglede en backslash inde i character
class'en, så der skal være 3 backslashes lige efter hinanden.

Alternativ løsning med back referencing fandt jeg også: /(?<!\\\)\'/

Håber der er andre der kan bruge dette til noget også!

>Hejsa
>
>Jeg er ved at lave en regular expression som skal finde single quotes
>(') i en string, men kun hvis de ikke har en backslash (\) før sig
>selv. De matches skal så erstattes af: \'
>
>Jeg ville mene at følgende pattern og replacement ville gøre det, men
>det fejlter:
>
>$pattern = "/([^\\])\'/"; //find with no preceding slash: '
>$replacement = "$1\\\'"; //replace with: \'
>$value = preg_replace($pattern, $replacement, $value);
>
>Men den kommer med denne fejl:
>
>Compilation failed: missing terminating ] for character class at
>offset 8
>
>Forklaring til pattern:
>- parantesen gør at jeg ikke fjerner det tegn der er før single quote,
>men at jeg kan genindsætte det tegn i replacement string.
>- 2 backslashes i character range for at escape den backslash jeg ikke
>vil matche.
>- hvis jeg tilføjer endnu en afsluttende bracket (]) efter den første
>fejler scriptet ikke, men så undlader det heller ikke matches af
>single quotes med foranstillet backslash. Og der skal jo heller ikke
>være 2 afsluttende brackets!
>
>Så jeg mangler lidt hjælp. På forhånd tak.


Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste