Portál AbcLinuxu, 16. května 2025 19:03

Dotaz: Rozsirene regularni vyrazy a bezkontextovy jazyk

29.9.2012 13:47 Karel Marhoul
Rozsirene regularni vyrazy a bezkontextovy jazyk
Přečteno: 441×
Odpovědět | Admin
Zdravim, muj dotaz bude souviset s perlovskymi regularnimi vyazy a taky s formalnimi jazyky.

Jazyk a^n b^m (nejdrive libovolny nenulovy pocet znaku 'a' a pak libovolny nenulovy pocet znaku 'b') je regularni a tudiz lze definovat (klasickymi nerozsirenymi) regularnimi vyrazy, viz:
root@bt:~# cat test.txt 
bbbbbaa
aaabb
abbb
aaaabbbb
root@bt:~# grep 'a\+b\+' test.txt 
aaabb
abbb
aaaabbbb
Jazyk a^n b^n (posloupnost znaku 'a' nasledovanyna STEJNYM poctem znaku 'b') je vsak uz jazyk bezkontextovy. Docetl jsem se, ze rozsirene regularni vyrazy (ERE,PCRE) mohou popsat i takovy jazyk. Muze tedy mi prosim tedy nekdo uvest priklad treba z grepem tak jako vyse, ktery mi z toho vstupniho souboru vybere pouze retezec nalezejici do toho jazyka, tedy 'aaaabbbb'?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.9.2012 14:48 NN
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
Odpovědět | | Sbalit | Link | Blokovat | Admin
$ egrep '[a][b]{4}' test.txt
29.9.2012 15:07 chrono
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na Stackoverflow sa niečo také objavuje pomerne často (napr. Match a^n b^n c^n (e.g. “aaabbbccc”) using regular expressions (PCRE), technicky je to riešenie zložitejšieho problému, ale je tam odkaz aj na ten aaabbb problém).
wamba avatar 29.9.2012 15:25 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
Odpovědět | | Sbalit | Link | Blokovat | Admin
viz. perldoc perlre
 echo aaaabbbb |perl -nE 'print if /^(a(?1)*b)$/'
This would have been so hard to fix when you don't know that there is in fact an easy fix.
29.9.2012 16:12 Karel Marhoul
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
Dekuji to je presne ono, jen bych to potreboval prevest na grep. Toto nefunguje:
echo aaaabbbb | grep -E '^(a(?1)*b)$'
29.9.2012 16:19 chrono
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
Je otázne, či sa to dá urobiť s rozšírenými POSIX regexp, ale s pcregrep to funguje.
29.9.2012 17:39 Karel Marhoul
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
Ja myslel ze PCRE a extended POSIX regexps jsou ekvivalentni...
29.9.2012 17:55 chrono
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
ERE oproti BRE pridáva viac-menej len operátory ? a + (a mierne mení syntax zápisu napr. a{1,2} z pôvodného a\{1,2\}).
30.9.2012 22:05 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
PCRE znamená Perl Compatible Regular Expression. A perlové výrazy jsou silnější než rozšířené výrazy. Jako rychlý přehled doporučuji manuálovou stránku pcresyntax(3) z balíku pcre. (Že pcre není zcela kompatibilní s Perlem prozatím přejdeme.)
wamba avatar 29.9.2012 23:51 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Rozsirene regularni vyrazy a bezkontextovy jazyk
tak tohle by mohlo fungovat
echo aaaabbbb | grep -P '^(a(?1)*b)$'
This would have been so hard to fix when you don't know that there is in fact an easy fix.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.