Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML]wyrażenia regularne - formatowanie komórki w wierszu tabeli
matusjamar
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.12.2010

Ostrzeżenie: (0%)
-----


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ś... ?
(IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
tolomei
post
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


Cześć (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
tolomei
Go to the top of the page
+Quote Post
matusjamar
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.12.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 16:06