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ę (IMG:style_emoticons/default/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
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ł... |
|
|
|
![]() |
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
|
|
|
|
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.
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. |
|
|
|
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?
|
|
|
|
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%)
|
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%)
|
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/ |
|
|
|
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ą?
|
|
|
|
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 (IMG:style_emoticons/default/wink.gif)
|
|
|
|
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 |
|
|
|
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?
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 12:11 |