/ / Dlaczego "(. *?) $" Będzie pasować "(abc abc)" do abc (abc abc) "? - regex, lazy-evaluation

Dlaczego "(. *?) $" Będzie pasować "(abc abc)" do abc (abc abc) "? - regex, lazy-evaluation

Podążając za moim rozumowaniem, powinien on pasować do spacji> dowolnych znaków przed końcem łańcucha, oraz ? czyni to leniwym, co oznacza abc)? jest najlepszym dopasowaniem.

Dlaczego robię źle? Nie powinno to pasować abc)?

Odpowiedzi:

1 dla odpowiedzi № 1

Twój regex:

 (.*?)$

lub aby uczynić go bardziej czytelnym:

s(.*?)$

nie jest naprawdę leniwy, ponieważ nie ma nic po leniwy kwantyfikator .*?. Jest prawie taki sam jak:

s(.*)$

dlatego właśnie znajduje pierwszą przestrzeń i wszystko po tej przestrzeni.


1 dla odpowiedzi nr 2

Znajdzie pierwszą przestrzeń, a następnie wszystko inne, aż do końca struny.

Ze względu na kolejność oceny, otrzymamy to jako pierwsze (spacja) to twoja (.*?) dopasuje wszystko do końca łańcucha $. To działa od lewej do prawej.

Jeśli naprawdę chcesz dopasować cokolwiek poostatnia przestrzeń, jak wskazano przez @RevanProdigalKnight, musisz upewnić się, że pasuje do spacji, a następnie wszystkiego, co nie jest spacją, aż do końca łańcucha. Zasugeruję następujące wyrażenie regularne:

/sS*$/