regexp.. отрицание содержание в куске.

Phoenix

вот есть строка ( AAA fdsafdas AAA fdBBBas AAA fdsaCCCfsda AAA fdsafdas AAAA )
какой регексп удовлетворяет всему, что между ААА и ААА, содержит ССС и при том не содержит AAA/
т.е. нужно выделить тот кусок между ААА, который содержит ССС
хочется что-то вроде
/AAA[^(AAA)]+CCC[^(AAA)]+AAA/
но не работает

katrin2201

lazy?
AAA.*?AAA

Phoenix

блин, вопрос по-тупому задался.
исправил

AlexV769

символ 'А' используется ИСКЛЮЧИТЕЛЬНО как разделитель, или он может встречаться и между тройками ААА?

Marinavo_0507

> нужно выделить тот кусок между ААА, который содержит ССС
если perl или pcre, то имхо проще воспользоваться сначала функцией split

Irina22

может, конечно

Irina22

как на перле?
про сплит - конечно проще.
но эта проблема возникала и других задачах. вот решил разобраться

Olenenok

*?AAA(.*?CCC.*?)AAA.*

Irina22

в этом-то и проблема. в эти точки он загоняет ААА, что не противоречит его жадности. он ничего справа выкинуть не может.
 
$17:07 steel ...trash/fdas(0/2)$ ./aa.pl
yahoo: fdsafdas AAA fdBBBas AAA fdsaCCCfsda
$17:07 steel ...trash/fdas(0/2)$ cat aa.pl
#!/usr/local/bin/perl
$str="AAA fdsafdas AAA fdBBBas AAA fdsaCCCfsda AAA fdsafdas AAAA";
if($str =~ /.*?AAA(.*?CCC.*?)AAA.*/) {
    print "yahoo: ".$1."\n";
}
 

пс: я не понял, зачем в начале ставить ".*?" - оно ж смысла никакого не несёт

Olenenok

*AAA(.*?CCC.*?)AAA.*

Olenenok

In [12]: import re

In [13]: str = 'AAA fdsafdas AAA fdBBBas AAA fdsaCCCfsda AAA fdsafdas AAAA'

In [14]: expr = re.compile ('.*AAA(.*?CCC.*?)AAA')

In [15]: m = expr.match (str)

In [16]: print m.group (1)
fdsaCCCfsda

In [17]:

Marinavo_0507

> вот решил разобраться
имхо ты сначала определись, с чем

Irina22

имхо ты сначала определись, с чем

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

Irina22

убедил.

Marinavo_0507

можно написать типа такого, но работать будет неэффективно, и вообще нафиг не надо:
([^A]|A[^A]|AA[^A])*CCC([^A]|A[^A]|AA[^A])*

Irina22

жесть..
интересно просто было само существование такое возможности.
всем спасибо!

tihon972009

А у тебя AAA и CCC фиксированной длины?
И это именно три символа одинаковых? Или разные могут быть?
Оставить комментарий
Имя или ник:
Комментарий: