Na przykład w przypadku kodu zawierającego wiele takich fragmentów:
<section>
<p><b>test</b></p>
</section>
Chcę móc wyszukać:
<section>
<p><b>
Żebym mógł go zastąpić
<section>
<h2>
Ale nie zastępuj innych <p><b>
, które nie mają tagu sekcji bezpośrednio przed nim.
Nie mogę więc wyszukiwać, <p><b>
ale NetBeans nie pozwala mi wklejać zaznaczeń spacją. Zakładam, że muszę wyszukać wyrażenie regularne czegoś takiego:
<section>(any-white-space)<p><b>
Ale nie jestem pewien, jak to zrobić. Każda pomoc będzie mile widziana.
\s
powinien obejmować na przykład spacje, tabulatory i znaki nowej linii lub grupę podobną[\n\r\t ]
(jeśli\s
nie jest obsługiwana w używanej wersji Regex).Odpowiedzi:
Przetestowałem to w jEdit (który jest również napisany w Javie jak Netbeans, ale w tej chwili nie mam dostępu do Netbeans). Wypróbuj to dla wzorca wyrażenia regularnego:
z tym użytym jako zamiennikiem:
Wzorzec wyrażenia regularnego mówi „dopasuj sekwencję, która jest poprzedzona
<section>
i zaczyna się od dowolnej ilości spacji (która jest przechowywana jako grupa przechwytywania 1), a następnie zawiera<p><b>
co najmniej jeden znak, który nie jest<
(i przechowuje te znaki jako grupę przechwytywania 2 ) i kończy się na</b></p>
„.Wzorzec zastępczy mówi po prostu: „zacznij od białych znaków z grupy przechwytywania 1, a
<h2>
następnie wyślij, a następnie znaki z grupy przechwytywania 2, które znaleziono w<b>
elemencie, a następnie wyślij</h2>
”. Przechwytywanie i wysyłanie białych znaków oznacza, że nowy element h2 rozpocznie się od tych samych znaków nowej linii i tabulatorów, co element p, więc zmiana nie zniszczy żadnego ładnego formatowania.Pamiętaj tylko, że regex nie ma możliwości ustalenia, gdzie jest on związany ze strukturą DOM, więc nie może wiedzieć, czy poprawne jest użycie h1, h2, h3, h4 itd. Ale jeśli tylko potrzebujesz,
<h2>
spróbuj tego.(W rzeczywistości, jeśli używasz HTML5, możesz uruchomić każdy nowy element sekcji z
<h1>
elementem lub dowolnym innym numerem początkowym, a wymagana jest zgodna przeglądarka do automatycznego obsługi poziomów nagłówka).źródło