Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Regex]Wyrażenie regularne
MateuszS
post 18.07.2013, 13:08:09
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam, niestety w moim projekcie muszę użyć rzeczy, której totalnie nie rozumiem i nienawidzę dostal.gif czyli wyrażeń regularnych. Co prawda projekt jest w C++ ale to chyba jedno i to samo jeżeli chodzi o wyrażenie regularne. Mam takie cudo

  1. <span id="num_a" class="">
  2. 2.098 </span>
  3.  
  4. ...
  5.  
  6. <span id="num_b" class="">
  7. 1.098 </span>
  8.  
  9.  
  10. ...
  11.  
  12. <span id="num_c" class="">
  13. 5.098 </span>


I muszę z tych trzech tagów wybrać wartości liczbowe. Jak widać zmienia się tylko "id" taga oraz sama wartość w tagu którą chcę pozyskać. Próbowałem różnych kombinacji z grupowaniem ale nie działa to tak jak bym chciał...


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
redeemer
post 18.07.2013, 13:33:59
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Wyrażenia regularne nie za bardzo nadają się do parsowania HTML. http://www.mostthingsweb.com/2013/02/parsing-html-with-c/ Jeśli natomiast musisz skorzystać z wyrażeń regularnych to może:
Kod
/<span id="num_[a-z]" class="">(.*?)?<\/span>/s


--------------------
Go to the top of the page
+Quote Post
MateuszS
post 18.07.2013, 13:52:14
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Coś w tym stylu tylko zamiast tych [a-z] to musi być wyraz. Trochę faktycznie wprowadziłem w błąd bo gdyby to było sama jedna literka to nie byłoby takie trudne ale tu mam coś takiego bardziej.

  1. num_jeden
  2.  
  3. num_dwa
  4.  
  5. num_trzy


czyli wieloliterowe słowa. Oczywiście próbowałem z grupowaniem (.+) a także z alternatywą (jeden|dwa|trzy) tyle że mi to nie działa.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
b4rt3kk
post 18.07.2013, 13:56:52
Post #4





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

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


A zwykłe [a-z]+ nie wystarczy?


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
MateuszS
post 18.07.2013, 13:59:04
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


  1. std::regex pattern("<span id=\"num_[a-z]+\" class="">(.*)</span>");


nie działa


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
freemp3
post 18.07.2013, 14:29:49
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Cytat(MateuszS @ 18.07.2013, 14:08:09 ) *
Co prawda projekt jest w C++ ale to chyba jedno i to samo jeżeli chodzi o wyrażenie regularne.

Niestety to nie jest jedno i to samo. PHP korzysta z POSIX oraz PCRE natomiast C++ z wyrażeń regularncyh ECMAScript.
To wyrażenie nie zadziała ponieważ "." oznacza wszystko oprócz nowej linii dlatego trzeba dodać do wyrażenia obsługę nowych linii. Całość wygląda tak:
Kod
<span id=\"num_[a-z]+\" class="">((?:.|\n)*)</span>


Dodatkowo polecam aby zapoznać się z tym:
http://www.cplusplus.com/reference/regex/ECMAScript/


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
MateuszS
post 18.07.2013, 19:33:10
Post #7





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Niestety też nie działa. Może te spacje między wartością a tagami też coś psują?


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
gothye
post 18.07.2013, 19:52:22
Post #8





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


litera "i" na końcu pomoże pominąć spacje wink.gif


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
MateuszS
post 18.07.2013, 20:34:39
Post #9





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Chyba nie. W dokumentacji nie ma nic z samym "i". Próbowałem dodać i nie pomogło. W c++ za spacje chyba odpowiada \s (też próbowałem)

Co ciekawe nawet takigo czegoś nie znajduje

Kod
std::regex pattern("<span id=\"num_jeden\" class="">")


Ten post edytował MateuszS 18.07.2013, 21:35:39


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
freemp3
post 22.07.2013, 11:03:14
Post #10





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Mógłbyś podać ten kawałek kodu, w którym wykonujesz sprawdzanie?


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
MateuszS
post 22.07.2013, 15:00:15
Post #11





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Z tego co się dowiedziałem chodzi o różne kodowanie znaków na stronie z której pobieram dane (UTF-8) i inne w konsoli C++. Mimo że oba stringi wyglądają identycznie, gdy je porównujemy program twierdzi że są różne.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
freemp3
post 23.07.2013, 07:25:34
Post #12





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


W takim razie wstaw tekst na sztywno do kodu, w tedy będziesz wiedział czy to wina kodowania czy wyrażenia.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 06:43