Okhelp.cz

Recepty, články, nápady, programování. Dříve dum-zahrada, finance, internet a know-how.okhelp.cz Pro lepší výsledky hledání používejte i diakritiku.

Re: Regulérní výrazy flags - modifiers

6 LW*

0.)Re: Regulérní výrazy flags - modifiers - re-regulerni-vyrazy-flags-modifiers-id-2315


gGlobal / najde všechny, nezastaví se po prvním nálezu
mMultiline / prohledá i v dalších řádcích
iCase insensitive / citlivý na velikost písmen
xIgnore whitespace / ignoruje všechny mezery a umožňuje vložení komentáře do regexu. Komentáře jsou označeny znakem "#". Pokud potřebujete zahrnout znak mezery ve vašem regexu musíte jej označit '\ '
sSingle line
uUnicode / \w+ již pak vybere celé slovo i když obsahuje například českou dikakritiku
XeXtended
UUngreedy / např. a+ vybere jen první a z aaaaaa
AAnchor / např. a+ označí první výskyt a a všechny další a pokud jej následují holaaaahou už ne aaa
JDuplicate group names / regex může mít duplicitní názvy vzorů, ale každá skupina vyhledání má stále své vlastní ID. Npř. /(?<letter>a)(?<letter>b)/J Tyto dvě skupiny produkují vlastní zápas namísto jedné kombinované skupiny. ab bude rozděleno do dvou skupin. Full match bude ab

Přejít na topic "Re: Regulérní výrazy flags - modifiers" v kontextu témata kategorie?


AD

Celé téma ( whole topic)


topic_id=1985

Opitonal regex

V příkladu níže vidíme, co bude nalezeno.
Pokud nic nebude nalezeno, je za regulárním výrazem NONE, nebo NOT.
POZOR! Zde se nejedná o skupiny (group) v závorkách,
ale o dopředné, či zpětné vyhledávání.

na(?=jde) na za kterým JE jde
na(?!jde) na za kterým NENÍ jde
(?<=na)jde jde před kterým JE na
(?<!na)jde jde před kterým NENÍ na
((?<=před)slovem) tento vytvoří skupinu,
ve které bude ze slova předslovem vybráno (slovem)

Hledej vpřed - Lookhead:
Hledej znak, za kterým JE ....

Pozitive Lookahead: q(?=u) najde q za kterym je u, a q je
možno nahradit bez užití (group).

Negative Lookhead: Hledaj znak, za kterým NENÍ ...

q(?!u) najde q za kterym NENÍ u, a q je<br />možno nahradit bez užití (group).

<b>Využití:</b> se projeví až při použití více znaků. Např. hledáme<br /> q po kterém NEnásleduje ueb.
q(?!ueb)
Je to možné i jinak?
<hr />

Hledej vzad - Negative lookbehind:
Hledej znak, před kterým NENÍ ...

Find b if not lookbehind -
(?<!-)b        ab *b .b NONE FROM -b 

Positive lookbehind:
Hledej znak, před kterým JE ...

Find b if lookbehind x
(?<=-)b           -b cr-b l-bel NONE FROM cb *b +b

Použití např. při nahrazování: [^-](b) tento sice nalezne b, před kterým není -, ale při nahrazování by nahradil jak b tak i znak mínus před ním!

([^-])(b) museli bychom tedy sdružovat do skupin jednotlivé znaky, které nechceme aby byly před b.
Při více znacích by byl regex zbytečně nepřehledný. Při nahrazování bychom pak museli ohlídat, která skupina se bude měnit, která se pak nechá beze změny.
Proto je (?<!textPřed)b daleko přehlednější.


(?<!-)(b) tento nahradí pouze každé b, před kterým NENÍ -, ALE - MÍNUS ponechá! MÍNUS je jen pro lepší názornost a může to být libovolný znak, který je pro vás důležitý.
Použití se projeví při řětězci za sebou jdoucích znaků. Např. najít znak q, kterému předchází řetězec ueb.

(?<=ueb)q


color  colour

 colo(?!u)	<b>colo</b>r not colour
 colo(?=u)	<b>colo</b>ur not color	
 colou?r         color colour
 colou{0,1}r     color colour
 colo([^u]*)r    color
 colou{0}r       color
 colou{0,1}r     color colour
 colo([^u]+)\s   color+one white space
 colo([^u]+)\b   color+all to new word
 colo([^u].)r    none
 colo([^u])r     none
 colo([^u])rs    none
 (.*[^\.])\.    col.or. not color..



Date: 17.02.2020 - 09:48
topic_id=1985

regex for matching something if it is not preceded by something else
REGEX bude před použitím zřejmě nutno vložit mezi lomítka např. /regex/
Za ukončovací lomítka se dávají značky "flags" např. g - globální atd. viz v příspěvcích níže.

(?<!Math)\.round

najde .round jen když není před ním Math
OK
a.round
c.round
NOT Math.round

regex if not followed by something
Math(?!\.round)

Vybere Math , za kterým NEnásleduje .round
OK
Math.pow, Math.cos
NOT
Math.round

Výše uvedené REGEX jsou vhodné například při hledání v souborech, kdy hledáme nějakou funkci stejného názvu, která není, nebo je přidružena např. k Math
topic_id=1985

Odkazy na online regex editory:

https://regex101.com/


https://www.debuggex.com/r/LyIpMYTAhJ9Gja4x
topic_id=1985

Jeden znak: a, b nebo c [abc] [abc]a bb ccc
Znak kromě: a, b nebo c [^abc] [^abc]d, ff, mmm ale ne a, bb, ccc
Znak od až po: a-z [a-z] [a-z]jez, mez, bez ale ne keřík - neumí diakritiku
Znak není v rozsahu: a-z [^a-z] vybere prázdné mezery i pismena s diakritikou
Znak v rozsahu: a-z nebo A-Z [a-zA-Z] neumí diakritiku
Jakýkoliv jednotlivý znak . bere vše i diakritiku, kromě znaku konce řádku
Znak mezery \s ^\r
\t\f\v a mezery
Znak není mezera \S vše kromě mezer viz výš
Číslice \d pouze číslice
Libovolné jiné než číslice \D vše výjma číslic
Jakýkoliv znak písmena \w \w+celá slova pokud neobsahují diakritku či nepísmena
Jakýkoli znak jiný než písmeno \W \W+*-+#@ ale ne _ podtržítko
Vše co bude v závorce (group) (...) (he)všechna he ze slov
Buď a nebo b (a|b) (a|b)vybere vešechna a i b ze slov
Nula nebo jeden znak a a? bao?bao , ba, ale ne samotne b
Nula nebo více a* bao*ba, bao ale ne b, bax, bac
Jeden nebo více a+ a až nekonečno aaaa i a uprostřed slova
Přesně 3 znaky a a{3} aaa aaaa jen první 3 znaky, ale ne aa
3 nebo více znaků a a{3,} aaa až nekonečno aaaaaaaa
Mezi 3 a 6 znaky a a{3,6} aaa aaaaaa ale ne aa
Začátek řetězce ^ ^\w+např. slovo je začátek nového řádku
Konec řetězce $ \w+$(veme konci) poslední slovo na konci
Hranice slova \b d\b(veme d na konci slov) hrad led
Není hranice slova \B a\Ba v ab, ale ne v ba
Nový řádek
\r
?|
cross platform newline / nalezne nový řádek napříč platformami
Tab - tabulátor \t
Carriage return CR \r návrat vozíku https://cs.wikipedia.org/wiki/Carriage_return

5.) Re: Regulérní výrazy flags - modifiers - re-regulerni-vyrazy-flags-modifiers-id-2315


gGlobal / najde všechny, nezastaví se po prvním nálezu
mMultiline / prohledá i v dalších řádcích
iCase insensitive / citlivý na velikost písmen
xIgnore whitespace / ignoruje všechny mezery a umožňuje vložení komentáře do regexu. Komentáře jsou označeny znakem "#". Pokud potřebujete zahrnout znak mezery ve vašem regexu musíte jej označit '\ '
sSingle line
uUnicode / \w+ již pak vybere celé slovo i když obsahuje například českou dikakritiku
XeXtended
UUngreedy / např. a+ vybere jen první a z aaaaaa
AAnchor / např. a+ označí první výskyt a a všechny další a pokud jej následují holaaaahou už ne aaa
JDuplicate group names / regex může mít duplicitní názvy vzorů, ale každá skupina vyhledání má stále své vlastní ID. Npř. /(?<letter>a)(?<letter>b)/J Tyto dvě skupiny produkují vlastní zápas namísto jedné kombinované skupiny. ab bude rozděleno do dvou skupin. Full match bude ab


Editace: 1555312345
Počet článků v kategorii: 74
Url:re-regulerni-vyrazy-flags-modifiers-id-2315

AD
Share
Share
Tweet