Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML]wyrażenia regularne - formatowanie komórki w wierszu tabeli
Forum PHP.pl > Forum > Przedszkole
matusjamar
Witam. Mam problem z wyrażeniem regularnym, za pomocą którego chciałbym nadać klasę np. w co 6tej komórce wiersza tabeli. Wzór mojego wyrażenia:
<tr>\s*(<td[^.]*?</td>\s*){5}<td([^.]*?</td>\s*)\s*</tr>\s*
znajduje 5 komórek i 6tą do objęcia klasą.
Dokonuję zamiany przy mocy wyrażenia:
<tr>$1<td class="nazwa klasy"$2</tr>\n
Problem polega na tym, że mój sposób usuwa z wiersza pierwsze 4 komórki. Zostaje tylko 5ta i 6ta-objęta klasą.
Może jest na to jakaś rada? Przy małej ilości komórek w wierszu można stosować co prawda:
<tr>\s*(<td[^.]*?</td>\s*)(<td[^.]*?</td>\s*)(<td[^.]*?</td>\s*)(<td[^.]*?</td>\s*)(<td[^.]*?</td>\s*)<td([^.]*?</td>\s*)\s*</tr>\s*
i zamienić przez:
<tr>$1$2$3$4$5<td class="nazwa klasy"$6</tr>\n
ale przy większej ilości komórek będzie i z tym problem.
Może ktoś... ?
winksmiley.jpg
tolomei
Cześć smile.gif

Nie wiem czemu dałeś [^.] co oznaczałoby "wszystko oprócz dowolnego znaku". W praktyce pasuje tu tylko znak nowego wiersza.

Twoje wyrażenie będzie wyglądało tak:

<tr>\s*((?:<td.*?</td>\s*)+)<td(.*?</td>\s*)\s*</tr>\s*


Pozdrawiam smile.gif
tolomei
matusjamar
Dzięki za odpowiedź tolomei. Racja jeśli chodzi o pierwszą kwestię (chociaż obie wersje sprawdzają się w wyszukiwaniu).
Jednak co do całego wyrażenia, które zamieściłeś - nie działa (sprawdziłem w Pajączku 5.8 i EmEditor 10 oraz na stronie maciek.lasyk.info/regexp_checker.html.
Poza tym stosując do mojego wzoru Twoją propozycję wychodzi mi mniej więcej:
<tr.*?(<td.*?</td>\s*){5}<td(.*?</td>\s*)</tr>
Wzór działa przy wyszukiwaniu jak starsza wersja jednak przy zamianie problem jest ten sam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.