![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
_program_seeker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.2.2007 Репутация: нет Всего: нет |
Здравствуйте, я прочитал про регулярные выражения, поделал некоторые примеры, но более сложные вещи осуществить трудно и непонятно. Помогите пожалуйста составить регулярное выражение, кторое описывает строку, содержащую любые последовательнсти символов кроме указанной цепочки.
Использую следующий паттерн
все работает как надо: nnABnnnnnnnnnnABnnnn - здесь выводит true, потому что строка содержит обрамление AB nnnnnnnnnnnnnnnnnnnnnn - здесь выводит false, потому что обрамления нет nnABnnnnnAnnnnnABnn - здесь выводит false, потому что внутри обрамления есть запрещенный символ A вот... а мне теперь нужно чтобы был не просто запрещенный символ A а запрещенная цепочка AB. и всвязи с этим возникло затруднение.. как указать в паттерне отрицание слова AB ? Это сообщение отредактировал(а) _program_seeker - 28.2.2007, 14:56 |
|||
|
||||
DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: нет Всего: 13 |
AB([^(AB)]*)AB
-------------------- |
|||
|
||||
_program_seeker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.2.2007 Репутация: нет Всего: нет |
к сожалению паттерн AB([^(AB)]*)AB реагирует и на такую строку
![]() ABnnnnnAnnnnnnnnnnnnnnnnnAB |
|||
|
||||
DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: нет Всего: 13 |
ну да... там же нет AB в середине строки..
а ловятся только AB целиком если надо не A и не B, то AB([^AB]*)AB -------------------- |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
AB([^\\QAB\\E]*)AB
И [^AB], и [^(AB)] означает "не (A или B)". Это сообщение отредактировал(а) w1nd - 28.2.2007, 16:19 -------------------- ![]() ![]() |
|||
|
||||
_program_seeker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.2.2007 Репутация: нет Всего: нет |
так тоже не работает... кроме того иногда вылетают непонятные исключения... ладно - может просто переформулировать задачу, чтобы было более понятно: как найти строки, не содержащие слово водка? например: "это простое предложение про огурец" - эта строка правильная "водка это напиток богов" - эта строка неправильная Это сообщение отредактировал(а) _program_seeker - 28.2.2007, 17:34 |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Вообще-то, и AB([^\\QAB\\E]*)AB тоже означает не (А или В) - в классе символов описываются символы, а не последовательности.
Специально проверил ваш шаблон:
Разница в строках всего в один символ. Добавлено @ 17:50 Если инвертировать подход к решению, то задача решается проще некуда. Просто найди все строки, которые содержат запрещённые слова. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
_program_seeker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.2.2007 Репутация: нет Всего: нет |
ну а прямого решения выходит не существует? |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Не могу гарантировать на 100%, но я не знаю, как можно организовать отрицание некоторой последовательности.
![]() -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
_program_seeker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.2.2007 Репутация: нет Всего: нет |
всем откликнувшимся большое спасибо за участие! ваши примеры помогли мне и навели на такое решение! которое по моему делает то что мне надо:
буду тестировать нет ли тут подводных камней ![]() |
|||
|
||||
DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: нет Всего: 13 |
млин точно!
-------------------- |
|||
|
||||
_program_seeker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 28.2.2007 Репутация: нет Всего: нет |
только как я и предполагал, тут обнаружился неприятный подводный камень:
паттерн: AB([^A][^B]*?)AB строка: ABoooooooooooooooooAB результат: соответствует шаблону строка: ABoooooooABooooooooooAB результат: несоответствует шаблону и вот он подводный камень! строка: ABoooooooAooBooooooooooAB результат: несоответствует шаблону (хотя по задумке должен) и вот камень строка: ABoooooooBAooooooooooAB результат: несоответствует шаблону (просто поменяли местами A и B) Это сообщение отредактировал(а) _program_seeker - 28.2.2007, 18:55 |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Даже ABoooooooAooooooooooAB будет с "камнем". Потому что шаблон означает следующее:
"проверить, начинается ли строка с АВ, заканчивается ли АВ и при этом не содержит ни А, ни В внутри". -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Правильно, это означает "не AB". И отлично работает для "ABoooooooooooooooooAB", "ABoooooooAooBooooooooooAB" и "ABoooooooBAooooooooooAB". Строка "ABoooooooABooooooooooAB", разумеется, не подходит, так как содержит "AB". А вот шаблон "AB([^A][^B]*?)AB" неверен (если исходить из первоначальных условий), потому что последовательность "[^A][^B]" означает "любые два символа не являющиеся A или B". А слово водка в предложении найдет вот такой шаблон: ".*\\QВОДКА\\E.*" Это сообщение отредактировал(а) w1nd - 28.2.2007, 23:40 -------------------- ![]() ![]() |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Уверен? Проверял? Вот что говорит тестирование шаблона AB([^\\QAB\\E]*)AB на приведённых строках:
Может, суть задачи не до конца ясна? Надо проверить строку на то, что в ней не содержится непрерывная последовательность АВ, а не просто два символа А и В. Причём, я бы в шаблон добавил ^$, иначе сами видите, что получается (последняя строка в примере). -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |