Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Usuwanie pustych atrybutów html, regex
Strelok
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2018

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


Witam, problem wygląda następująco:

W poniższym kawałku HTML chciałbym złapać wszystkie puste atrybuty attr (oznaczone na czerwono):

<img src="/test-image_1.jpg" attr="test-image_1" qwe="asd" attr>
<img src="/test-image_1.jpg" attr="test-image_1" qwe="asd" attr=>
<img src="/test-image_1.jpg" attr= "test-image_1" qwe="asd" attr="">
<img src="/test-image_1.jpg" attr= "test-image_1" qwe="asd" attr=" ">
<img attr="a attr b" src="/test-imagalte_1.jpg" attr qwe="asd" />
<img src="/test- alt image_1.jpg" attr="test-image_1" attr= "" qwe="asd" >
<img src="/test-image_1.jpg" attr = " " asd=" q" attr="test-image_1" attr qwe="asd" >

Poprzez "puste" rozumiem także atrybuty attr zawierające między cudzysłowami białe znaki.
Dodatkowo ciągi attr występujące pomiędzy cudzysłowami nie powinny zostać złapane.

Wyrażenie które mam na ten moment:
/attr(?=(?:[^"]*"[^"]*")*[^"]*\Z)/gi

https://regex101.com/r/MvpdM9/1

Ten post edytował Strelok 8.03.2018, 16:32:25
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 47)
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Powiem Ci, że będzie ciężko. Wyrażenie regularne może mieć dużo pułapek i nie używałbym go do tego celu. Najlepiej to by było znaleźć bibliotekę do parsowania drzewa DOM, która potrafi znaleźć duplikaty atrybutów. Zduplikowany atrybut już nie jest prawidłowym HTML-em.

Chodzi o jednorazowe czyszczenie czy potrzebujesz skryptu, który będzie to robił wielokrotnie?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Użyj sobie tego: https://github.com/paquettg/php-html-parser

Znajdź wsystkie `img` potem iteruj po nich sprawdzając

if(trim($item->getAttribute('attrib')) === '')

i zapisuj.

Ten post edytował Pyton_000 9.03.2018, 08:42:58
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Pyton, ale jest jeden problem. Te biblioteki w zależności od implementacji wyłapują tylko pierwsze lub ostatnie wystąpienie danego atrybutu, bo prawidłowy HTML i ogólnie XML nie mogą mieć powtórzonych atrybutów. Dla obu przypadków, kiedy na przykład masz taki oto znacznik:

  1. <div attr="" attr="Misie koala" attr="">Pandy też</div>


Parser w ogóle nie dowie się, że w środku jest jakaś wartość, a raczej nie chodzi autorowi o to, żeby wyrzucać wszystkie w takim przypadku, tylko te puste.

Moim zdaniem w grę wchodzi szukanie biblioteki, która pozwoli na znalezienie wszystkich atrybutów o danej nazwie (wątpliwe czy taka biblioteka istnieje), a w ostateczności mała modyfikacja dowolnego parsera DOM. Tak, wiem - brzydko, ale co zrobić.

Od biedy można użyć parsera do wyłapania elementów (selektor CSS [attr]) i potem już zabawa z wyrażeniem regularnym. Nadal brudno, ale jednak mniejsza szansa na zepsucie całego HTML-a (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował SmokAnalog 9.03.2018, 12:56:43
Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nie doczytałem że tam może być więcej attr w tagu.

Masz rację. DOM w php odczytuje tylko pierwszy attr.

No to pozostaje zabawa regexp.
Go to the top of the page
+Quote Post
trzczy
post
Post #6





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Co w tym trudnego?

https://regex101.com/r/qZ7Slx/1

  1. \s?\battr\s*=\s*"\s*"|\s?\battr\b\s*=(?![^=<>]*")(?!\s*=)|\s?\battr\b(?![^=<>]*")(?!\s*=)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nic trudnego tylko nikomu się nie chciało takiego potworka pisać (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Strelok
post
Post #8





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2018

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


Cytat(trzczy @ 9.03.2018, 14:01:25 ) *
Co w tym trudnego?

https://regex101.com/r/qZ7Slx/1

  1. \s?\battr\s*=\s*"\s*"|\s?\battr\b\s*=(?![^=<>]*")(?!\s*=)|\s?\battr\b(?![^=<>]*")(?!\s*=)

Dzięki, wygląda nieźle (IMG:style_emoticons/default/smile.gif) Jeszcze tylko lekko zmodyfikować pod kątem łapania apostrofów i double quotes i powinno być w porządku. Istnieje jeszcze taki rzadki przypadek gdy nazwa tagu będzie się pokrywać z szukanym atrybutem, np. <attr attr="">.

Ja napisałem coś takiego (nieco moich wymagań spełnia (IMG:style_emoticons/default/smile.gif) ):

  1. attr(?:(?:\s*=\s*".*?"|\s*=\s*'.*?')|(?=(?:[^"']*["'][^"']*["'])*[^"']*\Z)[\s]*=?[\s]*?)


Hmm i jeszcze jeden przypadek kiedy "attr" jest fragmentem nazwy innego atrybutu z myślnikiem, np. <img attr="" attr-inny="">.

E:

powinienem jeszcze dodać, że danymi wejściowymi dla takiego regexa będzie właściwie tylko jeden tag html z zawartością, np.:
<img src="/test-image_1.jpg" attr= "test-image_1" qwe="asd" attr=" ">
albo
<attr src="/test-image_1.jpg" attr= "test-image_1" qwe="asd" attr=" ">
albo
<img src="/test-image_1.jpg" attr= "test-image_1" qwe="asd" attr-qwe=" ">

Ten post edytował Strelok 9.03.2018, 14:42:01
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Cytat(trzczy @ 9.03.2018, 14:01:25 ) *
Co w tym trudnego?

https://regex101.com/r/qZ7Slx/1

  1. \s?\battr\s*=\s*"\s*"|\s?\battr\b\s*=(?![^=<>]*")(?!\s*=)|\s?\battr\b(?![^=<>]*")(?!\s*=)

Tak kozaczysz, a Twoje wyrażenie polega na zwykłym stringu:
  1. <div>attr</div>


Po prostu regexa się nie używa w takim celu i tyle, bo tworzy to niesamowicie nieczytelny i podatny na błędy kod (jak widać).
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pytanie skąd taki śmietnik przychodzi...
Go to the top of the page
+Quote Post
trzczy
post
Post #11





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


@SmokAnalog taaa...
@Strelok, najlepiej zapodaj string do przetestowania regexu. Wtedy jest mniej pytań ze strony układającego regex.

Ten post edytował trzczy 9.03.2018, 15:43:03
Go to the top of the page
+Quote Post
Strelok
post
Post #12





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2018

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


Cytat(trzczy @ 9.03.2018, 15:40:20 ) *
@Strelok, najlepiej zapodaj string do przetestowania regexu. Wtedy jest mniej pytań ze strony układającego regex.

Dajmy na to tag o nazwie attr, gdzie szukane puste atrybuty to attr:
  1. <attr attr src="/test-image_1.jpg" attr = " " asd=" q" attr="test-image_1.jpg" attr qwe="as-d q-q" x="attr asd" >


Ten post edytował Strelok 9.03.2018, 15:56:58
Go to the top of the page
+Quote Post
trzczy
post
Post #13





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Wersja z <attr akceptowalnym:

https://regex101.com/r/qZ7Slx/3
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #14





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nadal wyłapujesz luźny ciąg znaków attr niebędący atrybutem, więc Twój kod jest bezużyteczny.
Go to the top of the page
+Quote Post
trzczy
post
Post #15





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Postawiłem sobie za zadanie spełniać testy. Bezużyteczność to twoje urojenia.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #16





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


No to dodaj prawidłowo te testy (IMG:style_emoticons/default/haha.gif) Co to w ogóle jest za odpowiedź (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
trzczy
post
Post #17





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Jeśli masz jakieś wymagania, to zapraszam do giełdy.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #18





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nie no, super. Dodawaj złą odpowiedź bez uprzedzenia (bo nie przetestowałeś dokładnie) i chciej kasy za prawidłową. Twój kod ma podstawowy błąd, bo upierasz się jak zwykle przy wyrażeniach regularnych, mimo że nie masz w nich wprawy i nie wiesz kiedy należy ich unikać.
Go to the top of the page
+Quote Post
trzczy
post
Post #19





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Znajdź sobie więc fajniejszego kolegę. Ja oferuję regexy spełniające testy zadane przez pytającego.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #20





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Mam nadzieję, że jeśli pracujesz z klientami to wkładasz trochę więcej serca w pracę. Klient (lub osoba pytająca) nie ma obowiązku umieć utworzyć testów i kolega wyżej po prostu przeoczył jeden z najważniejszych przypadków, kiedy ciąg znaków "attr" występuje w roli węzła tekstowego. Jak się odpowiada na pytania, trzeba myśleć za osobę pytającą, a nie rzucać odpowiedzią jak papuga.
Go to the top of the page
+Quote Post
trzczy
post
Post #21





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Jasno stawiam sprawę: dajesz testy, znajdę regex. Reszta to twój ból.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #22





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nie chcę brzmieć jak tatuś, ale przemyśl swoje zachowanie (IMG:style_emoticons/default/tongue.gif) Bo zachowujesz się jak księżniczka, co łaskę robi, że paluszkiem kiwnie. Albo pomagasz jak należy, albo wcale.
Go to the top of the page
+Quote Post
trzczy
post
Post #23





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Kojarzysz mi się głównie z blamażem file_get_contents. Fajnie, że już jesteś z powrotem.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #24





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Hę?
Go to the top of the page
+Quote Post
trzczy
post
Post #25





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Zniknąłeś na parę dni, jak dostałeś srogą naukę. Nie przeprosiłeś osób, które wcześniej potraktowałeś obcesowymi uwagami ad personam. Ten temat z curlem, crawlerem i file_get_contents.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #26





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Zniknąłem jak dostałem jakąś naukę? Nie wiem co bierzesz, ale bierz połowę. Ja zawsze na tym forum bywałem w kratkę jakbyś nie zauważył. Mówisz o moim temacie, gdzie kilka osób wypisywało kompletne idiotyzmy? Tam się czegoś nauczyłem? Aha.
Go to the top of the page
+Quote Post
trzczy
post
Post #27





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


W mych oczach potwierdziłeś, że masz zdolności głównie kokieteryjne i przeważnie uprawiasz gadulstwo. Pożytecznej wiedzy przynosisz na forum tyle, co kot napłakał. Weźmy np. ten temat. Pomogłem Koledze tutaj dwukrotnie, a ty zero. Ale postów nastukałeś masę.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #28





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(trzczy @ 10.03.2018, 01:22:17 ) *
Zniknąłeś na parę dni, jak dostałeś srogą naukę. Nie przeprosiłeś osób, które wcześniej potraktowałeś obcesowymi uwagami ad personam. Ten temat z curlem, crawlerem i file_get_contents.


Daj link do tematu/posta.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #29





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Raczej mu zaszkodziłeś niż pomogłeś, bo podałeś błędne rozwiązanie.

Link do tematu: http://forum.php.pl/index.php?act=findpost&pid=1228535
Go to the top of the page
+Quote Post
trzczy
post
Post #30





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Moje rozwiązanie nawiązuje wprost do wymagań pytającego. A ty przypisujesz pytającemu jakieś inne intencje, mimo że on im literalnie zaprzecza. Domyślam się, że przeoczyłeś to, kiedy pytający czarno na białym napisał, że nie chodzi o teksty między tagami. Umiejętność przyznania się do błędu świadczy o klasie człowieka.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #31





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


No i właśnie nie miały być wyłapane, a Twój wzorzec je łapie. W tym problem. Jak będzie gdzieś w tekście, to mu to wywali. To jest poważny mankament i zaproszenie do zepsucia treści.
Go to the top of the page
+Quote Post
trzczy
post
Post #32





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Różne są zadania w informatyce i sprowadzanie ich do kilku typowych stereotypów może przynieść szkodę. Pytający przyszedł z konkretnym problemem i uzyskał odpowiedź wedle swych potrzeb. Odpowiedź alternatywną możesz wstawić, na pewno nikt nie będzie jej krytykował, jak będzie działała.

A teraz coś czego nie lubię: powtarzać mą włąsną wypowiedź któryś raz, bo rozmówca ją wypiera. Otóż, pytający napisał, że między tagami nie ma żadnej treści. Znaczy to nic innego, jak to, że nie przewidziano <div>attr</div> ani nawet <div>kupka</div>
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #33





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nie rozumiem o co chodzi z tym sprowadzaniem do stereotypów. Zadanie jest jasne, tylko jak to często bywa, osoba pytająca nie uwzględnia wszystkich potencjalnych problemów w pytaniu. Taki urok zadawania pytań, że osoba odpowiadająca musi sama przemielić pytanie i spojrzeć na nie z lotu ptaka.

Jeżeli faktycznie jest sto procent pewności, że pewna sytuacja nie wystąpi, to można iść na pewne kompromisy, choć jest to już jazda na krawędzi, bo warunki wejściowe mogą się kiedyś zmienić. Nie chce mi się sprzeczać, tym bardziej że nie ma o co. Napisałem wyżej, że najlepiej byłoby poszukać parsera co nie zignoruje powtórzonych atrybutów. Takie zdanie podtrzymuję. Bez tego pozostają rozwiązania z błędami, które jednak mogą wystarczyć autorowi pytania, choć tego nie wiemy na pewno.

Nie sprzeczajmy się już. Dobranoc.
Go to the top of the page
+Quote Post
trzczy
post
Post #34





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Cytat(SmokAnalog @ 10.03.2018, 02:28:34 ) *
Zadanie jest jasne, tylko jak to często bywa, osoba pytająca nie uwzględnia wszystkich potencjalnych problemów w pytaniu.

Problem w tym, że Ty jesteś oderwany od rzeczywistości.

Kilka razy w tym wątku pisałeś, że osoba zadająca pytanie nie uwzględnia przypadku, że słowo attr jest między tagami div.

Tymczasem mijasz się tu z prawdą, bo pytający napisał konkretnie, że nie przewiduje przypadku, że między tagami będzie cokolwiek. Jesteś odporny na fakty.

Są granice wmawiania pytającemu, że pyta on o coś innego niż mu się wydaje. I ja sporu nie skończę, dopóki nie cofniesz tego argumentu wyssanego z palca, że moja praca nie uwzględnia słowa attr między tagami.

Wykonałem poważną robotę i nie pozwolę, by ktoś podważał moje umiejętności przez wymyślanie fikcyjnych problemów.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #35





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Możecie sobie prywatne żale wylewać gdzieś indziej?

Jest rozwiązanie problem, jest uwaga że nie wyłapuje wszystkiego. Autor sam sobie zdecyduje co z tymi informacjami zrobić.

Koniec. temat wyczerpany.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #36





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Trzczy - Twoja argumentacja jest cholernie amatorska. Tak robią kiepscy programiści, kiepscy lekarze, kiepscy prawnicy i w ogóle wszyscy kiepscy, że za rozwiązanie problemu uznają
usunięcie objawu wspomnianego przez "pacjenta".

- Boli mnie głowa, panie doktorze.
- Proszę wziąć lek przeciwbólowy.

Czasami takie podejście jest do zaakceptowania, jeśli chodzi o jednorazową akcję i sami sobie sprawdzimy ręcznie potem efekt, ale tutaj to jest już słabe. Owszem, autor mówi, że nie przewiduje takiej sytuacji. Ale to nie znaczy, że kod ma mu ZNISZCZYĆ treść w przypadku, gdy przez pomyłkę jednak taka sytuacja zajdzie. Czuję się jakbym mówił do ucznia na pierwszej lekcji programowania.

Wiem, że włożyłeś dużo pracy w ten wzorzec, no ale bywa i tak - czasem się mylimy w naszej pracy, jakkolwiek byśmy się nie napracowali. Przestań mnie obrażać za to, że ostrzegam osobę zadającą pytanie przed potencjalnym poważnym zagrożeniem idącym za Twoim rozwiązaniem. Twoje niechlujstwo i lenistwo nie jest godne podziwu.

Pyton - Gdyby kod "nie wyłapywał wszystkiego", to by nie było sporu. Problem polega na tym, że on wyłapuje zbyt dużo. Powiedzmy, że ta funkcjonalność została umieszczona w funkcji removeEmptyAttributes:

  1. $before = <<<HTML
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="utf-8">
  6. <title>Example</title>
  7. </head>
  8. <body>
  9. <div style="" style="color: orange;" style>
  10. Wow, her style is amazing!
  11. </div>
  12. </body>
  13. </html>
  14. HTML;
  15.  
  16. $after = removeEmptyAttributes('style', $before);


Kod kolegi trzczy owszem, wyrzuci atrybuty, ale przy okazji wywali słowo "style" z treści i nikt tego nie zauważy. Zostanie nam to:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <meta charset="utf-8">
  4. <title>Example</title>
  5. </head>
  6. <div style="color: orange;">
  7. Wow, her is amazing!
  8. </div>
  9. </body>
  10. </html>


Ten post edytował SmokAnalog 10.03.2018, 12:12:20
Go to the top of the page
+Quote Post
Strelok
post
Post #37





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2018

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


Dziękuję za wszelkie sugestie. Zdaję sobie sprawę z zagrożeń wynikających z problemu wyłapywania zbyt dużej ilości wystąpień i zaznaczam, że owe wyrażenie jest mi potrzebne jedynie w celach edukacyjnych.
Wstępnie posiadam inne wyrażenie, które wyłapuje tylko otwarcie tagu HTML z zawartością.

W każdym razie, miałbym prośbę - czy istnieje możliwość modyfikacji poniższego regexa w taki sposób, aby nie wyłapywał atrybutów przypadkiem zawierających szukaną nazwę. Mam na myśli atrybuty z myślnikami, tj. attr-x x-attr.

Regex o którym mowa:
https://regex101.com/r/qZ7Slx/4

Nowy ciąg:
Z myślnikami:
  1. <img attr="" nonattr="" attr-x="" x-attr>
Go to the top of the page
+Quote Post
viking
post
Post #38





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Wrzuciłem do https://packagist.org/packages/electrolinux/phpquery. Bez problemu usuwa:

  1. pq('img')->removeAttr('attr');


Kod
<img src="/test-image_1.jpg" qwe="asd">
<img src="/test-image_1.jpg" qwe="asd">
<img src="/test-image_1.jpg" qwe="asd">
<img src="/test-image_1.jpg" qwe="asd">
<img src="/test-imagalte_1.jpg" qwe="asd">
<img src="/test-%20alt%20image_1.jpg" qwe="asd">
<img src="/test-image_1.jpg" asd=" q" qwe="asd">
<img nonattr="" attr-x="" x-attr>
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #39





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Przy okazji wywala też niepuste, a nie o to chodziło.
Go to the top of the page
+Quote Post
viking
post
Post #40





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Poprzez "puste" rozumiem także atrybuty attr zawierające między cudzysłowami białe znaki

Więc wszystko się zgadza. Chyba że był jakiś ogranicznik jeszcze pomiędzy waszym sporem.
Go to the top of the page
+Quote Post
trzczy
post
Post #41





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Cytat(Strelok @ 10.03.2018, 12:47:26 ) *
by nie wyłapywał atrybutów przypadkiem zawierających szukaną nazwę. Mam na myśli atrybuty z myślnikami, tj. attr-x x-attr.

Wydaje mi się, że trzeba wstawić coś innego niż \b jako koniec lub początek słowa. Mianowicie jakiś zestaw znaków niezawierający myślnika. Może coś takiego [^\w\d-]
Taka praca nad regexem to w dużej mierze sprytne wyszukiwanie testów. Jest sporo roboty.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #42





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Cytat(viking @ 10.03.2018, 13:57:44 ) *
Poprzez "puste" rozumiem także atrybuty attr zawierające między cudzysłowami białe znaki

Więc wszystko się zgadza. Chyba że był jakiś ogranicznik jeszcze pomiędzy waszym sporem.

Przeczytaj po prostu dokładnie pierwszy post w temacie. Odważnie zakładać, że dwie osoby sprzeczają się o problem, który można rozwiązać w tak banalny sposób jaki podałeś (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
viking
post
Post #43





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Pierwsze zdanie to właśnie był cytat z pierwszego. Bo spieracie sie bez sensu o wyrażenia regularne które wiadomo sprawią tu problem i nie pasują do zadania. Usunięcie jak leci atrybutu danego spełnia warunki. Jak trzeba przefiltrowac to też żaden problem z phpquery.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #44





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Cytat(Strelok @ 8.03.2018, 16:30:07 ) *
<img src="/test-image_1.jpg" attr="test-image_1" qwe="asd" attr>

Jak widzisz, pierwszy attr nie jest na czerwono.
Go to the top of the page
+Quote Post
viking
post
Post #45





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


No a co za problem napisać ifa do tego?
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #46





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Ty tak serio?
Go to the top of the page
+Quote Post
viking
post
Post #47





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Ale niby co? Filtrowanie to zawsze domena użytkownika. Puste znaki, spacje w nazwie - takie rzeczy robi się według potrzeb. Zaraz stwierdzi że np myślnika też nie może być i system ma sam to zgadywać? Była rozmowa że biblioteki nie usuwają dwóch tych samych atrybutów. Nie jest to prawda.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #48





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nikt nie mówił, że biblioteki nie usuwają zduplikowanych atrybutów, tylko że ich nie wyłapują. Zastanów się chwilę. Jak masz wywalić tylko te puste, to w jakiś sposób musisz sprawdzić czy aby na pewno nie ma jakiegoś niepustego. I tutaj jest problem, bo crawlery wyłapują każdy atrybut danego typu tylko raz. Twoja logika zadziała tylko wtedy, gdy ten niepusty atrybut jest podany jako pierwszy (lub ostatni, pewnie są crawlery co biorą ostatni).

Zrozumiałeś teraz?
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 23.08.2025 - 13:52