I am attempting to remove double quotes from the beginning and ending of a
string. Admittedly, I am not the best with regular expressions, but I do
have two that work with preg_replace(). Here they are:
$pattern = '[^"]'; <--- removes the beginning double quote
$pattern = '["$]'; <--- removes the ending double quote
But when I try to make this all one statement with:
$pattern = '[^"].*["$]';
PHP throws a warning with an unknown modifier '.'. I then tried to enclose
'.*' in parentheses and I get an unknown modifier '('.
This is getting beyond my regex knowledge, if anyone has any advice on this
it would be greatly appreciated.
Thanks in advance,
AJ Schroeder
when using preg_* you need escape chars for the expression....
your first patterns should look something like:
$pat = '`^"`'; // quote at beginning of string
$pat = '`"$`'; // quote at end of string
$pat = '`^"(.*)"$`'; // single-line string that starts and ends with a quote
--
Posted via a free Usenet account from http://www.teranews.com
Hmm, maybe I am that dense, but that last expression seemed to torch the
entire string and return nothing. The first two work no problem.
Still confused...
> Hello group,
>
> I am attempting to remove double quotes from the beginning and ending of
> a
> string. Admittedly, I am not the best with regular expressions, but I do
> have two that work with preg_replace(). Here they are:
>
> $pattern = '[^"]'; <--- removes the beginning double quote
> $pattern = '["$]'; <--- removes the ending double quote
>
> But when I try to make this all one statement with:
>
> $pattern = '[^"].*["$]';
>
> PHP throws a warning with an unknown modifier '.'. I then tried to
> enclose
> '.*' in parentheses and I get an unknown modifier '('.
Yes indeed.
The preg_* function expect a pattern like this:
(delimiter)(pattern)(delimiter)(modifiers)
You are free to choose your own delimiter ('/' is pretty standard), and a
second occurance of that character is assumed to end the pattern and start
the modifiers. (I'm actually quite ammazed it matches '[' to ']', a quite
rigid implementation would throw an error stating that " was an unknown
modifier).
$string = preg_replace('/(^"+|"+$)/','',$string);
--
Rik Wasmus
The last pattern assumes the string is a single line (no \r or \n in
it), and both begins and ends with "
This would match that pattern:
"The fox jumped over the lazy dog."
This would not:
The fox jumped over the "lazy" dog.
If you want to match as in the second string, try something more along
the lines of:
$pat = '`"([^"]*)"`';
When you are unsure how your patterns are matching, try something like
this to view it quickly:
if(preg_match_all($pat,$string,$m)){
echo '<pre>';
print_r($m);
echo '</pre>';
}
see the manual page for preg_match_all if you are not sure what the $m
array means.
The last pattern assumes the string is a single line (no \r or \n in
it), and both begins and ends with "
This would match that pattern:
"The fox jumped over the lazy dog."
This would not:
The fox jumped over the "lazy" dog.
If you want to match as in the second string, try something more along
the lines of:
$pat = '`"([^"]*)"`';
When you are unsure how your patterns are matching, try something like
this to view it quickly:
if(preg_match_all($pat,$string,$m)){
echo '<pre>';
print_r($m);
echo '</pre>';
}
see the manual page for preg_match_all if you are not sure what the $m
array means.
--
Justin and Rik,
Thank you for the help! I am now able to strip off beginning and ending
quotes of strings. Although I am still messing around with different strings
to handle all the combination of strings I will have to process, I have a
great starting point.
Thank you again.
AJ Schroeder