1) Gdy używane są grupy atomowe, silnik regex nie będzie przechodził wstecz w poszukiwaniu dalszych permutacji, jeśli pełne wyrażenie regularne nie zostało dopasowane dla danego ciągu znaków. Za każdym razem, gdy używasz alternacji, jeśli dopasowanie się powiedzie, regex natychmiast spróbuje dopasować resztę wyrażenia, ale będzie śledzić położenie, w którym możliwe są inne alternatywy. Jeśli reszta wyrażenia nie zostanie dopasowana, regex wróci do poprzednio zapisanej pozycji i wypróbuje inne kombinacje. Gdyby użyto Atomowego grupowania z, silnik regex miałby , a nie utrzymywał pozycję poprzednią i po prostu rezygnowałby z dopasowania. Powyższy przykład tak naprawdę nie wyjaśnia przeznaczenia grup atomowych. Po prostu wyraźnie pokazuje eliminację cofania. Grupy atomowe byłyby użyteczne w pewnych scenariuszach, w których stosuje się chciwości kwantyfikatory, a dalsze kombinacje są możliwe, nawet jeśli nie ma naprzemienności.
2) Grupy atomowe i grupy inne niż przechwytujące są różne. Grupy niezapisujące po prostu nie zapisują wartości dopasowań. Grupy atomowe po prostu wyłączają wycofywanie w przypadku, gdy potrzebne są dalsze kombinacje.
Na przykład, wyrażenie regularne a(?:bc|b)c
pasuje zarówno abcc
i abc
(bez robienia meczu), podczas gdy a(?>bc|c)c
pasuje tylko abcc
. Jeśli wyrażenie regularne to a(?>b|bc)c
, będzie pasować tylko do , podczas gdy a(?:b|bc)c
będzie nadal pasować do obu.
Dzięki! Jakie są różnice między grupami atomowymi a modyfikatorem dzierżawczym? Czy są to identyczne cele? – Tim
Modyfikator dzierżawy to po prostu cukier syntaktyczny dla atomu: '(?: A | b) * +' jest równoważne '(?> (?: a | b) *)'. –