regexp.. отрицание содержание в куске.
AAA.*?AAA
исправил
символ 'А' используется ИСКЛЮЧИТЕЛЬНО как разделитель, или он может встречаться и между тройками ААА?
если perl или pcre, то имхо проще воспользоваться сначала функцией split
может, конечно
про сплит - конечно проще.
но эта проблема возникала и других задачах. вот решил разобраться
*?AAA(.*?CCC.*?)AAA.*
$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";
}
пс: я не понял, зачем в начале ставить ".*?" - оно ж смысла никакого не несёт
*AAA(.*?CCC.*?)AAA.*
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]:
имхо ты сначала определись, с чем
имхо ты сначала определись, с чем
как обозначиться кусок любых символов, в котором нет заданной подстроки
убедил.
([^A]|A[^A]|AA[^A])*CCC([^A]|A[^A]|AA[^A])*
интересно просто было само существование такое возможности.
всем спасибо!
И это именно три символа одинаковых? Или разные могут быть?
Оставить комментарий
Phoenix
вот есть строка ( AAA fdsafdas AAA fdBBBas AAA fdsaCCCfsda AAA fdsafdas AAAA )какой регексп удовлетворяет всему, что между ААА и ААА, содержит ССС и при том не содержит AAA/
т.е. нужно выделить тот кусок между ААА, который содержит ССС
хочется что-то вроде
/AAA[^(AAA)]+CCC[^(AAA)]+AAA/
но не работает