![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| lumentek |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 19.11.2009 Репутация: нет Всего: нет |
В общем мне нужно перед добавлением текста правильно типографировать, а именно заменить апострофы на кавычки (елочку) учитывая двойную вложенность? Тоесть, возможно, что в тексте будет 2 пары кавычек, а не одна, причем вторая пара внутри первой
|
|||
|
||||
| NLspieler |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 619 Регистрация: 13.10.2008 Где: Берлин Репутация: 16 Всего: 19 |
Пример в студию
|
|||
|
||||
| lumentek |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 19.11.2009 Репутация: нет Всего: нет |
В этом примере "есть строка, в которой есть "еще" подстрока" деменстрирующая двойную вложенность
Вот мне хотя бы с двойной вложеностью справится. Например, типограф лебедева решает эти задачи, но его не внедришь на сайт |
|||
|
||||
| NLspieler |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 619 Регистрация: 13.10.2008 Где: Берлин Репутация: 16 Всего: 19 |
Сделать можно регулярками
Остается вопрос, как определить, идет ли речь о двойной вложенности, или же речь идет о двух одинарных заключениях в кавычки? Это сообщение отредактировал(а) NLspieler - 15.7.2010, 03:24 |
|||
|
||||
| lumentek |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 19.11.2009 Репутация: нет Всего: нет |
В этом тоже суть проблемы. Не известно какую строку передаст пользователь
Тоесть может быть такие вариант 1. Строка "с двойной "вложенностью"" 2. Просто "строка" с "кавычками" |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
если строка сформирована правильно, то открывающая кавычка следует за пробелом и примыкает к буквенному символу, а закрывающая, соответственно, стоит перед пробелом/символом пунктуации и примыкает к буквенному символу. В таком случае, отличить одну указанную ситуацию от другой не составит труда. |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
как это? а это что? Добавлено через 8 минут и 49 секунд если послушать skyboy, то может получится что-то такое
так что весь типограф может быть набором таких регулярок... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
ksnk, не надо сверхсложных регулярок(это ещё нет регулярки на вариант "строки внутри которой "несколько" вложенных "пар" кавычек")
достаточно сделать стек: preg_replace_callback + функция со статической-переменной счетчиком. если открывающая кавычка - увеличивать счетчик. если закрывающая кавычка - уменьшать счетчик. и в соответствие со значение счетчика возвращать для замены ту или иную замысловатую кавычку. и в этой же функции можно просто игнорировать кавычки с пробелами по бокам( " ), как некорректную пунктуацию. правда, проблема: когда счетчик принудительно сбрасывать(чтоб в одном месте лишняя кавычка не навредила всему тексту)? по правилам языка, надо бы искать конец предложения, но конец предложения уже не найти при помощи регулярки. хотя, может, это и не критично. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
skyboy, Особенные глюки могут возниать, есть юзер не там пробел поставил ;) или не тот апостроф...
Так что лучше пользоваться тёминым типографом и все глюки валить на него, а он всех пошлет куда обычно -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
случаи, которые не обрабатываются: две подряд идущие кавычки(закрывающие). кстати, согласно правилам закрытия, несколько(две, как я понимаю) подряд идущие закрывающие кавычки не пишутся - только одна. т.е. с точки зрения правил грамматики правильно писать вот так:
кавычка в самом конце строки или в самом начале. надо просто расширить регулярки. |
||||
|
|||||
| lumentek |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 19.11.2009 Репутация: нет Всего: нет |
Да дейсвительно. Либо как вы сказали, либо для второй вложенной пары используются кавычки второго уровня (лапки).
http://ru.wikipedia.org/wiki/Кавычки Это сообщение отредактировал(а) lumentek - 15.7.2010, 13:01 |
||||
|
|||||
| lumentek |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 19.11.2009 Репутация: нет Всего: нет |
skyboy, как реализовать в вашем коде так, чтобы вторая пара вложенных кавычек заменялась лапками, а первая оствалась елочкой?
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |