Mam następujący ciąg:Regex zamienić tekst jednak wykluczyć, gdy tekst jest między konkretnego tagu
Lorem ipsum Test dolor sit amet, consetetur sadipscing elitr, sed diam nonumy <a href="http://Test.com/url">Test</a> eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd sed Test dolores et ea rebum. Stet clita kasd gubergren, no sea <a href="http://url.com">Test xyz</a> takimata sanctus est Lorem ipsum dolor sit amet.
Teraz chciałbym zastąpić ciąg poza „test” tagów nie między znacznikami (np zastąpione „1234”).
Lorem ipsum 1234 dolor sit amet, consetetur sadipscing elitr, sed diam nonumy <a href="http://Test.com/url">Test</a> eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd sed 1234 dolores et ea rebum. Stet clita kasd gubergren, no sea <a href="http://url.com">Test xyz</a> takimata sanctus est Lorem ipsum dolor sit amet.
zacząłem z tym regex: (?!<a[^>]*>)(Test)([^<])(?!</a>)
jednak dwa problemy nie zostały rozwiązane:
- tekst 'test' zostanie także zastąpione wewnątrz Tags (np)
- Czy tekst między tagiem nie jest dokładnie zgodny z wyszukiwanym tekstem, zostanie również zastąpiony (np.
<a href="http://url">Test xyz</a>
)
Mam nadzieję, że ktoś ma rozwiązanie, aby rozwiązać ten problem.
Dodałem też flagę \ b pasujące granicę słowo: (?!? ] *>) (\ BTEST \ b) (?! [^ <]*?) – Weri
To powinno dać optymalizatorowi regex więcej do pracy. Nie powinno to również wpływać negatywnie na twoje mecze, dopóki '_Test_, _Test lub Test_' nie znajdują się w Twoim dokumencie (i zakładasz, że nie będziesz chciał dopasować ich, jeśli były). – protist
Lookaheaed przed Testem i leniwy mecz są bez znaczenia. Zobacz moją odpowiedź. – Adam