Odkąd przyszedł tu za pomocą wyszukiwarki Google, i był zainteresowany w roztworze, który jest nie używając lookbehind, oto moje 2 centy.
[^^]aaa
wzór dopasowuje znak inny niż ^
a następnie 3 a
s wszędzie wewnątrz łańcucha. Numer [^...]
to negated character class, gdzie ^
nie jest uważany za znak specjalny. Zauważ, że pierwszy ^
, który jest tuż po [
jest specjalny, ponieważ oznacza negację, a drugi to tylko literalny symbol karetki.
W ten sposób ^
nie może znajdować się wewnątrz [...]
, aby wskazać początek ciągu znaków.
Rozwiązaniem jest użycie jakiegokolwiek negatywnego lookaround, te dwa będą działać równie dobrze:
(?<!^)aaa
i uprzedzona:
(?!^)aaa
Dlaczego prace uprzedzona też? Lookarounds są to asercje o zerowej szerokości, a kotwice również mają zerową szerokość - nie zużywają tekstu. Dosłownie mówiąc, (?<!^)
sprawdza, czy nie ma początku pozycji łańcucha bezpośrednio po lewej stronie bieżącej lokalizacji, a (?!^)
sprawdza, czy nie ma początku pozycji łańcucha bezpośrednio po prawej stronie bieżącej lokalizacji. Sprawdzane są te same lokalizacje , dlatego oba działają dobrze.
Czy pasujesz tylko do 'aaa'? Zastąpienie tego czym? –