Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.08.2009, 00:01
Аллиас вне форума Посмотреть профиль Отправить личное сообщение для Аллиас Найти все сообщения от Аллиас
  № 1  
Ответить с цитированием
Аллиас
 
Аватар для Аллиас

Регистрация: May 2009
Сообщений: 63
По умолчанию RegExp: соотетствие отсутсвию строки (аналог /[^X]/ ). Как?

Здравствуйте. Вопрос такой:

Как составить регулярное выражение соответствующее тексту, не содержащиму одну из нескольких строк, например следующее выражение соответствует тексту в котором нет символов "a" или "b" или "c":
Код AS3:
var reg:RegExp = /[^abc]/gis
а мне нужно что-то наподобие:

Код AS3:
var reg:RegExp = /[^(not|at|all)]/gis
теоретически должно соответствовать тексту в котором нет строки "not", "at" или "all". Но это выражение не работает
__________________
Все не так просто, как кажется... все гораздо проще...


Последний раз редактировалось Аллиас; 15.08.2009 в 02:25.
Старый 15.08.2009, 01:47
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
var pattern:RegExp = /^((?!(hot|at|all)).)*$/gi;


Последний раз редактировалось udaaff; 15.08.2009 в 01:49.
Старый 15.08.2009, 13:55
Аллиас вне форума Посмотреть профиль Отправить личное сообщение для Аллиас Найти все сообщения от Аллиас
  № 3  
Ответить с цитированием
Аллиас
 
Аватар для Аллиас

Регистрация: May 2009
Сообщений: 63
udaaff,

Спасибо, выражение работает, только оно очень сложное для моего понимания (не совсем понятно зачем аж 3е скобок).
__________________
Все не так просто, как кажется... все гораздо проще...

Старый 15.08.2009, 15:35
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
"Скобки" называются группами. (hot|at|all) -- группа определяет гуппы символов с оператором перестановок. Далее (?=...) -- негативная группа забегания вперед. И последняя группа ()* для применения квантификатора.
http://help.adobe.com/ru_RU/ActionSc...0204-7e9a.html

Старый 15.08.2009, 16:05
Аллиас вне форума Посмотреть профиль Отправить личное сообщение для Аллиас Найти все сообщения от Аллиас
  № 5  
Ответить с цитированием
Аллиас
 
Аватар для Аллиас

Регистрация: May 2009
Сообщений: 63
Согласно написанному в приведенной статье приведенное ниже выражение pat должно соответствовать "подстроке 'для' перед которой нету слова 'только '"; следовательно replace должен выполнится только для первой строки, а вторую вернуть без изменений, но почему-то модифицируются обе строки:
Код AS3:
var pat:RegExp = /(?!только )(для)/gis;
var str:String = "текст для replace";
var str2:String = "текст только для replace";
trace(str.replace(pat, "only $1"));
//текст only для replace
trace(str2.replace(pat, "only $1"));
//текст только only для replace
//а должно быть: текст только для replace
//ведь правда?
вероятно я упускаю какую-то мелочь... или не так понимаю принцип работы "негативной группы просмотра вперед"
__________________
Все не так просто, как кажется... все гораздо проще...


Последний раз редактировалось Аллиас; 15.08.2009 в 16:11.
Старый 15.08.2009, 16:56
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
В данном случае надо использовать забегание назад. В хэлпе не нашол, но работает:
Код AS3:
var pat:RegExp = /(?<!только )(для)/gis;
Потому-что в твоем случае паттерн получается безсмысленный: ищем строку "для", которая не должна быть строкой "только ".

Старый 15.08.2009, 17:02
Аллиас вне форума Посмотреть профиль Отправить личное сообщение для Аллиас Найти все сообщения от Аллиас
  № 7  
Ответить с цитированием
Аллиас
 
Аватар для Аллиас

Регистрация: May 2009
Сообщений: 63
udaaff, Спасибо Оргомное, все работает как надо. Теперь я кажется понимаю, что значит "группа просмотра вперед" и "группа просмотра назад".
__________________
Все не так просто, как кажется... все гораздо проще...

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:25.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.