|
| 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.
| |
|
|