Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавить условия в строку рег. выражения, регулярные выражения 
:(
    Опции темы
NickG
Дата 12.7.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос вот в чем..
правило для обработки строки(java regex) формируется с помощью мастера...
ну к примеру:
нужная строка начинается с такой-то строки и заканчивается на такую-то -
начало.*конец  (выберет строку между этими двумя)

как теперь к данному рег. выражению добавить условия типа строка содержит такие-то символы или не содержит?

PM MAIL   Вверх
shamber
Дата 12.7.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 18



NickG, (java regex)
вы точно веткой форума не ошиблись?
PM MAIL Jabber   Вверх
NickG
Дата 13.7.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет smile
ну так как бы это было на perl?
просто:
а) регулярные выражения  - это стихия perl(а)
б) ява в этом плане похожа на перл сильно или я не прав?
в) очень специфическая тема
PM MAIL   Вверх
Nab
Дата 13.7.2007, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 26
Всего: 37



Тогда, NickG, давайте конкретно, показуйте примеры своих строк и подробненько что должно получиться...


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
NickG
Дата 13.7.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



о_О
ну к примеру:
есть строка "1 н2 3 б4 а5 6"
мне нужно одним регулярным выражением пройти такие условия:
1)данная строка начинается на "н2" и заканчивается на "а5" 
2) данная строка имеет подстроку к примеру "н2"
3) данная строка не содержит строку "к10"
и в результате я получаю "н2 3 б4 а5"

я так понял мне нужно логическое И реализованное не языком программирования, а в регулярном выражении

Это сообщение отредактировал(а) NickG - 13.7.2007, 00:45
PM MAIL   Вверх
NickG
Дата 13.7.2007, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хотя, хотя..... можно вставить в рег. выражение какие-то свои символы разделения.... (И)...
и потом при обработке делить строку с выражением на части... но все же одной строкой - конечный результат

Это сообщение отредактировал(а) NickG - 13.7.2007, 01:00
PM MAIL   Вверх
amg
Дата 13.7.2007, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 38
Всего: 50



NickG, все равно не совсем понятно, что нужно (А., Б. или В.). Начнем с того, что переформулируем условие 2)  на
2) данная строка имеет подстроку к примеру "б4"
т.к. в твоей формулировке оно просто лишнее. 

А. Проверить строки на соответствие условию 1) И 2) И 3)
Код

foreach ("1 н2 3 б4 а5 6", "н2 3 б4 а5") {
  if (/^н2.*а5$/ && /н2/ && !/к10/) {
    print 'match';
  } else {
    print 'no match';
  }
}
В перле есть возможность сделать такой код компактным и понятным (благодаря наличию магической неявной переменной $_), и никому даже в голову не придет вносить все условия в одно регулярное выражение: в данном случае это легко сделать, но получается, мягко говоря, не внятно (см. далее).
Кстати, будет еще понятнее (и быстрее работать), если разбить условие 1) на два: 
Код

/^н2/ && /а5$/ && /н2/ && !/к10/

Б. В строке выделить подстроку, удовлетворяющую условию 1) И 2) И 3)
Вот здесь составление сложного регулярного выражения, включаюшего все условия, IMHO, оправдано.
Код

if (/(н2(?:(?<!к10).(?!к10))*?б4(?:(?<!к10).(?!к10))*?а5)/) {
  print $1;
}

В. Из строки убрать лишнее, чтобы получилась строка, удовлетворяющую условию 1) И 2) И 3)
Не вижу способа сделать это одним регулярным выражением

Это сообщение отредактировал(а) amg - 13.7.2007, 09:58
PM MAIL   Вверх
nitr
Дата 13.7.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 37
Всего: 84



NickG, если вы так и будете "задавать вопрос не по существу - тем более по правилам форума ("сути нет")", то вам не помогут, здесь не телепатируют ;) А ещё могут посоветовать учить "матчасть"/RTFM и т.д.

Вы более точнее укажите - что у вас не получается, что необходимо сделать.
Так как, то что вы тут пишите - это невопрос, это больше смахивает на "обучение". Так google.com, Библиотеки. Азы составления "регулярных выражений" описаны ОЧЕНЬ ДОСТУПНО!!!


--------------------
PM   Вверх
Nab
Дата 13.7.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 26
Всего: 37



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

$str = "1 н2 3 б4 а5 6";
if ($str =~ /(н2.*?a5)/ and $1 !~ /k10/) {print $1 }

Второе: перечисление символов которые могут находиться относиться только как правило к поримитивам, к подстрокам это сложнее применять.

И как сказал nitr, вам бы немного подучиться потому что н2 в вашем случае не начало строки, а начало подстроки, вы сильно путаете терминологию и запутываете отвечающих... И вообще рекомендую вдуматься в мою подпись...


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

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


 




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


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

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