Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   RegExp: соотетствие отсутсвию строки (аналог /[^X]/ ). Как? (http://www.flasher.ru/forum/showthread.php?t=128698)

Аллиас 15.08.2009 00:01

RegExp: соотетствие отсутсвию строки (аналог /[^X]/ ). Как?
 
Здравствуйте. Вопрос такой:

Как составить регулярное выражение соответствующее тексту, не содержащиму одну из нескольких строк, например следующее выражение соответствует тексту в котором нет символов "a" или "b" или "c":
Код AS3:

var reg:RegExp = /[^abc]/gis

а мне нужно что-то наподобие:

Код AS3:

var reg:RegExp = /[^(not|at|all)]/gis

теоретически должно соответствовать тексту в котором нет строки "not", "at" или "all". Но это выражение не работает :(

udaaff 15.08.2009 01:47

Код AS3:

var pattern:RegExp = /^((?!(hot|at|all)).)*$/gi;


Аллиас 15.08.2009 13:55

udaaff,

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

udaaff 15.08.2009 15:35

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

Аллиас 15.08.2009 16:05

Согласно написанному в приведенной статье приведенное ниже выражение 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
//ведь правда?

вероятно я упускаю какую-то мелочь... или не так понимаю принцип работы "негативной группы просмотра вперед"

udaaff 15.08.2009 16:56

В данном случае надо использовать забегание назад. В хэлпе не нашол, но работает:
Код AS3:

var pat:RegExp = /(?<!только )(для)/gis;

Потому-что в твоем случае паттерн получается безсмысленный: ищем строку "для", которая не должна быть строкой "только ".

Аллиас 15.08.2009 17:02

udaaff, Спасибо Оргомное, все работает как надо. Теперь я кажется понимаю, что значит "группа просмотра вперед" и "группа просмотра назад".


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

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