Замена кавычек " на «» при помощи regular_expression

Tofik

Новичок
Замена кавычек " на «» при помощи regular_expression

такая задача:
· Если кавычка стоит слева от следующей за ней буквы, а перед ней стоит пробел либо знак препинания, то заменять её на «
· Если кавычка стоит справа от буквы, а после неё стоит пробел либо знак препинания, то заменять её на »
· Если оба условия не соблюдаются, то оставлять без изменения.

я сделал так:
PHP:
$t=ereg_replace("[, .-:;]([\"'])[a-zA-Z0-9а-яА-Я]","«", $t);
 $t=ereg_replace("[a-zA-Z0-9а-яА-Я]([\"'])[, \.-:;]","»", $t);
echo $t;
Но при таком раскладе заменяются не только кавычки, но и прилежащие символы. Как сделать так, чтобы удалялись только кавычки?
 

DiMA

php.spb.ru
Команда форума
$t=preg_replace("!([, .-:;])([\"'])(?=[a-zA-Z0-9а-яА-Я])!s","\\1&XXlaquo;", $t);
$t=preg_replace("!([a-zA-Z0-9а-яА-Я])([\"'])(?=[, \.-:;])!s","\\1&XXraquo;", $t);
xx убрать
 

Tofik

Новичок
а что значит "!" перед скобкой, "!s" после скобки и "?=" в скобках?

ПС
первая строка удаляет символ перед кавычкой, а вторая удаляет символ после кавычки
 

DiMA

php.spb.ru
Команда форума
1. делать в точности как сказано и написано
2. [, .-:;] заменить на [, .:;-]
 

Tofik

Новичок
Не пашет....
ПС
Дим, ответь на вопросы, плз. Мне важнее понять, чем получить решение.
 

DiMA

php.spb.ru
Команда форума
не компостируй мозги, я проверял. А для понимая читай фак.

PHP:
<?

$t=<<<END
 - Сын Дубровского воспитывался в Петербурге, дочь Кирила Петровича росла в глазах родителя, и Троекуров часто говаривал Дубровскому: "Слушай, брат, Андрей Гаврилович: коли в твоем Володьке будет путь, так отдам за него Машу; даром что он гол как сокол". Андрей Гаврилович качал головой и отвечал обыкновенно: "Нет, Кирила Петрович: мой Володька не жених Марии Кириловне. Бедному дворянину, каков он, лучше жениться на бедной дворяночке, да быть главою в доме, чем сделаться приказчиком избалованной бабенки".
END;

$t=preg_replace("!([, .:;-])([\"'])(?=[a-zA-Z0-9а-яА-Я])!s","\\1&laquo;", $t); 
$t=preg_replace("!([a-zA-Z0-9а-яА-Я])([\"'])(?=[, .:;-])!s","\\1&raquo;", $t);

echo $t;

?>
-~{}~ 23.05.05 20:30:

- Сын Дубровского воспитывался в Петербурге, дочь Кирила Петровича росла в глазах родителя, и Троекуров часто говаривал Дубровскому: «Слушай, брат, Андрей Гаврилович: коли в твоем Володьке будет путь, так отдам за него Машу; даром что он гол как сокол». Андрей Гаврилович качал головой и отвечал обыкновенно: «Нет, Кирила Петрович: мой Володька не жених Марии Кириловне. Бедному дворянину, каков он, лучше жениться на бедной дворяночке, да быть главою в доме, чем сделаться приказчиком избалованной бабенки».
 

untied

Сдвинутый новичок
Автор, а ты не пробовал сделать преобразование кавычек с помощью CSS? Там такая возможность имеется (в зависимости от языка документа выводится свой тип кавычек). Так же можно назначить какому-нибудь тегу свою кавычку (например, в документе встречается тег <Q>, а вместо него при выводе в браузер подставляется «; соответственно вместо тега </Q> -- »).
Не уверен, что эти преобразования поддерживает IE, но что мешает попробовать? Заодно расскажешь...
 

Avatars

Новичок
Tofik
вот еще рекомендуется:
http://spectator.ru/technology/php/quotation_marks_stike_back

Поддерживает вложенные кавычки типа:
Вася сказал: «Я живу в отеле „Калифорния“».
А также, оставляет " внутри тегов.
Еще и тире длинное ставится и т.д.
 
Сверху