|
Тема
|
regex v'pros
|
|
Автор | beginner (Нерегистриран) |
Публикувано | 04.02.04 16:20 |
|
kak se pravi otricanie na regex?
imam regex X, koyto ma4va ne6to (naprimer .*abc.* ma4va vsi4ko v koeto ima abc)
kak da napravya NOT X (vsi4ko, v koeto NYAMA abc)???
probvah s X{0} ama ne6to ne stava - (.*abc.*){0} ne raboti pravilno
i vtori v'pros - kak se pravi AND?
regex koyto ma4va ednovremenno i X i Y ???
v ob6ti linii ot trite nay-4esto izpolzvani logi4eski operatora znam samo OR - X|Y
a drugite???
toku 6to razbrah, 4e imalo mnogo formati regular expressions :(
az probvam s implementaciyata v Java 1.4
blagodarya predvaritelno
| |
|
Za otricanie se izpolzva znaka "^" ,NO ne i ako e v samoto na4alo na celiq reg. izraz,a na stringa.Primerno:
/[^AX]/ - shte savpadne sas vsi4ko,koeto NE e A ili X.
Ako e /^[AX]/ - shte tyrsi A ILI X,koito zadyljitelno da sa v na4aloto na stringa.
Po vtoriq vapros neshto ne razbrah.Kak taka ednovremenno? Ako shte sa v edin i sash Regulqren izraz ne ti trqbva operator AND.No ako pravilno sym razbral za neshto takova li pitash:
$_ = "Nqkakav message";
print $message if (/string1/ and /string2/);
Nadqvam se da sym ti bil polezen.
| |
Тема
|
Re: regex v'pros
[re: Teшkapcko_koпeлe]
|
|
Автор | beginner (Нерегистриран) |
Публикувано | 05.02.04 12:21 |
|
mersi za otgovora
/[^AX]/ 6te s'vpadne s vseki simvol, koyto ne e nito A, nito X
na men mi tryabva regex, koyto da NE s'vpada s stringovete, s koito regular expresiona X bi s'vpadnal
primer
X = /a.b/ s'vpada s 3simvolni stringove, koito po4vat s a i sv'r6vat s b
tryabva mi regular expression, koyto s'vpada s vsi4ko ostanalo ??? (moje bi bez prazniya string)
za AND ...
primer
X = /a.b/ s'vpada s 3simvolni stringove, koito po4vat s a i sv'r6vat s b
Y = /ab./ s'vpada s 3simvolni stringove, koito po4vat s ab i sv'r6vat s proizvolen simvol
Tryabva mi regex, koyto s'vpada s stringove, koito s'vpadat i s X i s Y???
v konkretniya slu4ay tova e regular expresiona /abc/, no na men mi tryabva za ob6tiya slu4ay na X i Y
ina4e programnoto re6enie, koeto opisva6 raboti, no ne mi v'r6i rabota
iskam AND operatora da e v samiya regex
s'6to kakto OR e v regexa - moje6 da napi6e6 /a.b|ab./ i tova 6te matchva vsi4ki 3-simvolni stringove, koito po4vat s a i nyakoy ot sledva6tite simvoli e b
nadyavam se, 4e sega (s tolkova mnogo primeri) v'prosite mi sa po-yasni
otnovo blagodarya
| |
Тема
|
Re: regex v'pros
[re: beginner]
|
|
Автор |
sdg (shebang addict) |
Публикувано | 06.02.04 12:44 |
|
Понеже си публикувал въпроса си в Perl форум, ще коментирам за Perl.
Не знам до колко Java 1.4 regular expressions са съвместими с Perl.
if ($var =~ /foo(?!bar)/) { alabala(); } #"реагира" на ``foo'' след което НЯМА ``bar''
if ($var =~ /foobar/) { nica(); } #очевиден AND -- ``foo'', след което ИМА ``bar''
От друга страна, ако имаш разклонения в алгоритъма на програмата, например:
if ($var =~/foo(?!bar)/)
{
warn "Help! Foo without Bar detected!";
};
тогава можеш да напишеш и:
if (($var =~ /foo/) && ($var !~ /foobar/))
{
warn "Help! Foo without Bar detected!";
}
Мисълта ми е, че ако имаш разклонения, няма да постигнеш по-добри резултати
с (?!pattern) израза. Или с други думи, все е тая къде ще обработиш AND и NOT --
в регулярния израз, или в "разклонителната" логика.
RTFM!
--sdg
| |
Тема
|
Re: regex v'pros
[re: sdg]
|
|
Автор | beginner (Нерегистриран) |
Публикувано | 07.02.04 13:22 |
|
blagodarya mnogo za otgovora
v doca na Java 1.4 pi6e, 4e syntaxisa e podoben na tozi v Perl. Zatova pitah tuk.
bi li razyasnil kakvo pravi tova (?!bar)? v knijkata, koyato 4eta ne e opisano, nito v Java 1.4 doca.
naistina /foo(?!bar)/ match-va foo sled koeto nyama bar
oba4e /^foo(?!bar)$/ izglejda match-va samo i edinstveno foo, koeto me ob'rkva !?!
razyasni molya te
kak se pravi regex, koyto proveryava dali v daden string NYAMA dadena duma???
vs'6tnost tova e moyata cel.
Imam regex X - /abc/ ili /^.*abc.*$/, koyto proveryava dali v stringa ima "abc".
tryabva mi regex Y=NOT X da proveryava dali v stringa nyama "abc".
/foobar/ e konkatenaciya, s'vsem ne e AND (kamo li o4eviden)
edno priblijenie e /foo.*bar|bar.*foo/ oba4e 1) e izli6no slojno i 2) nyama da raboti za naprimer
"abc" i "bce", za6toto /abc.*bce|bce.*abc/ nyama da matchva "abce".
v knijkata, koyato 4eta e predlojeno re6enie /^(?=*abc)(?=*bce)/s, koeto ne e obyasneno i az ne razbiram. osven tova ne raboti :( (Quantifier follows nothing in regex; marked by <-- HERE in m/(?=* <-- HERE abc)(?=*bce)/)
v s'6tata knijka v grafata za logi4esko otricanie (NOT) v tyaloto na regex e dadeno samo programnoto re6enie - $text !~ /abc/ :(
izglejda syaka6 ne moje otricanieto da se sloji v regexa, a tryabva da se programira :(
ne e vse edno dali 6te obraboti6 logi4eskata operaciya v koda ili v samiya regex. i problema ne e v po-dobrite rezultati, a v tova, 4e ponyakoga ne znae6 predvaritelno regex-a za da mu programira6 logikata. Zadavam vsi4kite tezi v'prosi, za6toto mi se nalaga da generiram regexa dinami4no ili da go 4eta ot file. Sledovatelno edinstvenata logika, koyato moga da programiram e $str=~/$regex/ taka, 4e da ostavya p'lnata svoboda na tozi, koyto posle 6te pi6e regexa. I ako toy nyama da ima svobodata da izpolzva AND ili NOT tova 6te e prekaleno golyamo ograni4enie :(
mersi otnovo i 4akam s net'rpenie
| |
|
|
|
|