A következő érdekes dologgal találkoztam, és nem tudom megmagyarázni. Remélem, van köztetek olyan, aki jobban ért ehhez, mint én, és elmondja, mi miért.
Szóval van egy reguláris kifejezés: a+(ab)*(abc)*
Van egy minta: aaaababababcabcabc
A reguláris kifejezés, amennyire értem, úgy kéne működjön, hogy legalább 1, de lehetőleg minél több "a" betűt kéne találjon, aztán 0 vagy több "ab" kombinációt, aztán 0 vagy több "abc" kombinációt.
Pl. ezen az oldalon azt írják, hogy "the plus is greedy. That is, the plus causes the regex engine to repeat the preceding token as often as possible. Only if that causes the entire regex to fail, will the regex engine backtrack."
Ennek alapján az a+-nak 4 darab a-t kéne találnia, és ezután az ab 0-t talál, abc 0-t talál. A kifejezés illeszkedik, hiszen 0 ab és 0 abc az elegendő.
C#-ban ez állítólag így is működik, meg állítólag a Visual Studio search boxában is.
Viszont pl. ha linux alatt az egrep parancsot használom, akkor nem.
$ echo aaaababababcabcabc | egrep --color a+
az első 4 a betűt beszínezi,
echo aaaababababcabcabc | egrep --color a+(ab)*(abc)*
viszont beszínezi az egész mintát.
Szóval arra lennék kíváncsi, hogy ez miért van.