Testování regexu

Testování regexu
« kdy: 10. 02. 2019, 14:19:38 »
Ked testujem regex v bash alebo cez program expr match, dostavam nejake divne vysledky. Netestuje to podla mna, ci sa to zhoduje, ale vyhladava to regex v stringu podobne ako to robi program grep. Je toto spravne spravanie? Je mozne ze tomu spravne nerozumiem. Ako otestujem 100% match s regexom?

bash
Kód: [Vybrat]
[[ helloworld =~ ^hell.* ]] && echo 'true' || echo 'false' #true podla mna
true
[[ helloworld =~ hell ]] && echo 'true' || echo 'false' #false podla mna
true
[[ helloworld =~ ell ]] && echo 'true' || echo 'false' #false podla mna
true

expr match
Kód: [Vybrat]
expr match helloworld '^hell.*' > /dev/null && echo 'true' || echo 'false' #true podla mna
true
expr match helloworld 'hell' > /dev/null && echo 'true' || echo 'false' #false podla mna
true
expr match helloworld 'ell' > /dev/null && echo 'true' || echo 'false' #false podla mna
false

Je pre mna divne, ze v pripade tretieho vzoru 'ell' sa nastroje spravaju odlisne.
« Poslední změna: 10. 02. 2019, 20:34:05 od Petr Krčmář »


Re:testovani regexu
« Odpověď #1 kdy: 10. 02. 2019, 14:51:00 »
« Poslední změna: 10. 02. 2019, 14:53:37 od Cikáda »

Re:testovani regexu
« Odpověď #2 kdy: 10. 02. 2019, 15:06:28 »
Ten expr to tam dava implicitne.
Citace
second is considered to be a (basic, a la GNU grep) regular expression, with a ^ implicitly prepended.
https://www.gnu.org/software/coreutils/manual/html_node/String-expressions.html#String-expressions

Este by som rad vedel ako otestovat 100% match.
Pretoze hell , ell , nie su 100% match podla mna.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:testovani regexu
« Odpověď #3 kdy: 10. 02. 2019, 15:19:48 »
Kód: [Vybrat]
$ [[ 'helloworld' =~ '^ell$' ]] && echo 'true' || echo 'false'
false

Zapomínáš psát apostrofy kolem stringů. To se ti vymstí.

Re:testovani regexu
« Odpověď #4 kdy: 10. 02. 2019, 15:36:13 »
Kód: [Vybrat]
$ [[ 'helloworld' =~ '^ell$' ]] && echo 'true' || echo 'false'
false

Zapomínáš psát apostrofy kolem stringů. To se ti vymstí.
Do tych dvojitych hranatych zatvoriek sa nedavaju apostrofy. Tie znefunkcnia regex.

Kód: [Vybrat]
[[ 'helloworld' =~ 'helloworld$' ]] && echo 'true' || echo 'false'
false #apostrof znefunkcnil regex
[[ helloworld =~ helloworld$ ]] && echo 'true' || echo 'false'
true #bez apostrofov to funguje


Re:testovani regexu
« Odpověď #5 kdy: 10. 02. 2019, 15:38:02 »
Dvojite hranate zavorky chrania obsah proti rozbaleniu bashom.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:testovani regexu
« Odpověď #6 kdy: 10. 02. 2019, 15:56:44 »
No jo, to bude tím, že mi nefunguje přihlašování z Firefoxu a musím to pracně přepisovat na tabletu. Dvojité závorky obvykle nepoužívám.

Re:testovani regexu
« Odpověď #7 kdy: 10. 02. 2019, 17:36:39 »
Uz tomu chapem. Ked napisem regex '^hell' , sprava sa to jako '^hell.*'. Ocakaval som, ze sa to bude spravat ako '^hell$' . Musim to vzdy viac specifikovat.
Moja chyba. Sorry za zbytocne tema.