díky za snahu, ale asi jste to netestovali, neboť to označí celé řádky. To co obarvují ty online nástroje hodně barvičkama ve skutečnosti jsou matching groups asi jste si mysleli, že když to vyznačí jednotlivé skupiny je vyhráno... což by stačilo v případě dalšího zpracování preg_match ... $match[2] (0...celý, jednička případné www., dvojka to co hledám),,, jenže právě to jsem na začátku upozorǚnoval že to má být čistě vyznačený řetězec shody
TLDR správně je
(.(?<!^www\.))+$, ale mám mírný pocit, že je to z hlediska výkonnosti neefektivní
(a krásné na tom je, že pouhá přítomnost toho znaku stříška ^ ovlivňuje jestli to funguje jen na počáteční www., nebo na poslední www. (což ale není uplně košér, cokoli.www.tamto by mělo pobrat celé, ale
www.www.tamto jsou zapeklité testovací řetězce ,ale lookbehind (?<!(www.)+) je zakázané)
Zkusil jsem 1.
(www\.)?(\S+(\.\S+)?)
i označí od začátku tedy i s www : (
2:
Tak radu FKoudelky jsem zkusil, nevím-jaký výraz jsem převedl na
cat testfile.txt | grep --color -Pi '^(?:www\.)?(.+?)$' a už od pohledu se mi zdá, že to bode blbost, jelikož začíná ^, že matchne uplně celý řádek od začátku včetně www a taky že jo, . Zkusil jsem ubrat počáteční ^ a nic. A tuším,
https://regex101.com/r/TejAZp/1PS: díky i za všimnutí "www." s tečkou, nechtěl jsem to komplikovat
Dopracoval jsem se teď k tomuhle výrazu :
((?<!^www\.).)+$,
ale máte tušení proč do shody nezapočte i první znak za www.?
www.fo.lk
hsa.dk
www.www.doublew
Dá se to řešit i pomocí .(?<!^www\.).)+$, což ale vyřadí uplně z shody www.a, www.b ... je to takové nesystémový hack i když use case pro www.z je nesmyslTohle je již správné :
(.(?<!^www\.))+$ ( přesun tečky v první závorce na začátek assertion
www.fo.lkhsa.dk
www.www.doublewwww.o
h
www.kdwk.www.jkjlk.www.kldssaskldwww.www.kdwk.www.jkjlk.www.kldssaskldwww.www.sad.www.sad.www.kdwkjkjlk.www.kldssaskldwww.www.www.sad.www.sad.www.kdwkjkjlk.www.kldssaskldsad.www.sad.www.kdwkjkjlk.www.kldssaskld