Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделить String и регулярные выражения, Можно заблокировать выражения? 
V
    Опции темы
_Y_
Дата 14.5.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Регулярные выражения нужны далеко не всегда. Часто нужно работать просто с текстовыми строками. И хотелось бы - не утыкаными обратными слешами.

Логично иметь разные классы для просто текста и текста, включающего регулярные выражения. Но что-то ничего похощего я не нашел.

Подскажите, пожалуйста, чего я не понимаю. Как заблокировать  регулярные выражения?


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
AntonSaburov
Дата 14.5.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



А конкретнее можно ? Тебе нужны простые способы работы со строками ?
PM MAIL WWW ICQ   Вверх
_Y_
Дата 14.5.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(AntonSaburov @ 14.5.2007,  13:35)
А конкретнее можно ? Тебе нужны простые способы работы со строками ?

Что уж конкретнее, чем вопрос "Как запретить регулярные выражения?"  smile  

Простые способы? Наверное да, нужны. Простые и удобные.

ЗЫ: Пример, обойти который я не смог: Чтобы передать в SQL апострофы, надо вставить перед ними обратные слеши:
Код

"string1'string2".replaceAll("'", "\\\\'")

Правда, глаза радует? smile 



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
nornad
Дата 14.5.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(_Y_ @  14.5.2007,  18:10 Найти цитируемый пост)
Чтобы передать в SQL апострофы, надо вставить перед ними обратные слеши:

Вот прямо по два слэша? Ужас.

В принципе, написать свой заменитель подстрок в строке без использования регулярных выражений недолго. Только вот он тебе не поможет. Потому что в replaceAll() регулярное выражение одно и оно у тебя равно "'". То есть строка из одного символа. И никакого страшного синтаксиса регулярок тут не видно.
Другое дело, что строка замены у тебя содержит обратные слеши. Но она-то как раз является просто строкой, на которую будет производиться замена. Уж извините, но обратные слеши надо эскейпить. Это вам не шарп, где можно игнорировать эскейп-последовательности. И не РНР, где можно строку заключить в апострофы вместо кавычек.

P.S. Если я тебя не так понял, то объясни более корректно, ибо в данный момент понимание описания проблемы у меня однозначное.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Hidrag
Дата 14.5.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



ИМХО придирки... smile


--------------------
user posted image
PM WWW ICQ   Вверх
_Y_
Дата 15.5.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(nornad @ 14.5.2007,  22:24)
Вот прямо по два слэша? Ужас.

Ставим эксперимент
Код

System.out.println("string1'string2".replaceAll("'", "\'"));
System.out.println("string1'string2".replaceAll("'", "\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\\\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\\\\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\\\\\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\\\\\\\'"));
System.out.println("string1'string2".replaceAll("'", "\\\\\\\\\\'"));

Получаем результат:
Код

string1'string2
string1'string2
string1'string2
string1\'string2
string1\'string2
string1\'string2
string1\'string2
string1\\'string2
string1\\'string2
string1\\'string2

Цитата(nornad @ 14.5.2007,  22:24)
Уж извините, но обратные слеши надо эскейпить. Это вам не шарп, где можно игнорировать эскейп-последовательности. И не РНР, где можно строку заключить в апострофы вместо кавычек.

Так в том и вопрос - нельзя ли это обойти. ИМХО PHP язык неудобмый, но наличие разных обозначений для строк и регулярных выражений - достоинство.

Цитата(nornad @ 14.5.2007,  22:24)
объясни более корректно, ибо в данный момент понимание описания проблемы у меня однозначное.

Проблемы нет. Есть неудобство. Это же все равно как убрать из Виндов Notpad потому, что там есть MS Word.

ЗЫ: Пожалуйста, не уличайте меня больше в грехе нелюбви к регулярным выражениям вообще и к слешам, в частности. Елси нет возможности работаты с простым текстом - ну и ладно.




--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
nornad
Дата 15.5.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(_Y_ @  15.5.2007,  13:33 Найти цитируемый пост)
Так в том и вопрос - нельзя ли это обойти.

Повторяю - нет. Нет. И ещё раз - нет. smile
Для обозначения строк в жабе есть только кавычки.
Нет, ну если есть желание поизвращаться, то обойти, конечно, можно. Например, напиши текстовый файл с нужными тебе строками и читай строки из него. Эскейпить лишний раз не придётся - слеши при загрузке строки сами "отэскейпятся". smile

Цитата(_Y_ @  15.5.2007,  13:33 Найти цитируемый пост)
Это же все равно как убрать из Виндов Notpad потому, что там есть MS Word.

Из пушки по воробьям. Ворд пользовать для всего неудобно. Так что сравнение фиговое.  smile 

Цитата(_Y_ @  15.5.2007,  13:33 Найти цитируемый пост)
ЗЫ: Пожалуйста, не уличайте меня больше в грехе нелюбви к регулярным выражениям вообще и к слешам, в частности.

Хм... проверил твой пример. Действительно, при замене подстрока-заменитель не удваивает, а учетверяет слеши. К чему бы это...

В твоём случае можно написать небольшой класс, который будет заменять в строке просто апострофы на апострофы со слешами. Думаю, тогда и без такой оравы слешей обойтись можно будет.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
_Y_
Дата 15.5.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(nornad @ 15.5.2007,  13:26)
Цитата(_Y_ @  15.5.2007,  13:33 Найти цитируемый пост)
Так в том и вопрос - нельзя ли это обойти.

Повторяю - нет. Нет. И ещё раз - нет. smile

Печально. Но отрицательный ответ это ответ. Спасибо.

Цитата(nornad @ 15.5.2007,  13:26)
Нет, ну если есть желание поизвращаться, то обойти, конечно, можно. Например, напиши текстовый файл с нужными тебе строками и читай строки из него ..... можно написать небольшой класс, который будет заменять в строке просто апострофы на апострофы со слешами. Думаю, тогда и без такой оравы слешей обойтись можно будет.

Никакого такого желания- Есть желание работать удобнее, а понятие удобнее - антоним понятию извращаться.

А зачем мне класс замены апострофов? Я уже написал четыре слеша smile  Вопрос мой был все-таки более общим, чем этот смешной пример smile 

Это сообщение отредактировал(а) _Y_ - 15.5.2007, 16:15


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
math64
Дата 16.5.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Можно только так:
Код

public static final APOS = "\'";
public static final QUOTE  = "\"";
public static final ESC = "\\";
public static final ESC2 = ESC + ESC;
public static final ESC4 = ESC2 + ESC2;

Компилятор складывает строковые константы на этапе компиляции, поэтому потери эффективности не будет
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.