![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 217 Pomógł: 21 Dołączył: 10.06.2011 Skąd: Głogów Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam pewien problem. Jak zrobić by funkcja mi nie zwracała znaku który się znajduje pomiędzy liczbami.
Wiem że mogę to zrobić str_replace albo preg_replace_callback, ale wole się spytać czy takie coś istnieje. przykładowe stringi
I chodzi by nie uwzględniło mi kropki pomiędzy. jeżeli użyje (?:\.) lub (?:\W) w szukanym stringu, i tak go uwzględni. return będzie 1.400, a chciałbym 1400 Jest taka możliwość w samym preg_matchu aby ominąć go? Ten post edytował jackraymund 20.04.2014, 08:39:30 -------------------- Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nawet gdyby istniała taka możliwość nie powinieneś tego robić - wyrażenie byłoby niepotrzebnie skomplikowane.
Prosty, bezpieczny kod, łatwy w utrzymaniu, zrozumieniu i utrzymaniu. Bez skomplikowanych wyrażeń regularnych nad których analizą zarówno programista jak i komputer musiałby spędzić zdecydowanie więcej czasu niż nad tym. PS. W przypadku 32-bitowej instalacji PHP rzutowanie na INT w tym konkretnym przypadku będzie niemożliwe. Ot, porąbane uroki PHP. ![]() PS2. Z jakiegoś powodu forum zmienia symbol euro (na początku obu argumentów preg_match'a) na znak "?". Ten post edytował Crozin 20.04.2014, 10:16:11 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 217 Pomógł: 21 Dołączył: 10.06.2011 Skąd: Głogów Ostrzeżenie: (0%) ![]() ![]() |
Właśnie do INT'a chciałem te wartości sprowadzić, ale ta funkcja by nie zwróciła wartości poza kropką.
Btw. po co na podwójnych backslash'ah? Wersja ((?:\d+\.)*\d+) działa identycznie. I zazwyczaj przed znakami specjalnymi uzywam jednego \. Jakaś różnica w szybkości przetwarzanego stringu, czy właściwości '' lub ""? Jakbym mógł poprosić o więcej info(czytałem kiedyś o nich, ale niezbyt zrozumiałem), że np. w jakiś przypadkach dla jednego \ trzeba przedstawić za pomocą \\\\ PS. RE: Tak, a znajdź chociaż 64bitową wersje, jedyna opcja to bierz source i sam kompiluj(dobierz odpowiednio flagi biblioteki itd.), to są dopiero uroki... Próbowałem kiedyś zaalokować więcej niż 2gb. Z 2 dni mordęgi i 0 efektów. PS2. RE: Taa, niestety ten edytor ma ten problem. Ale zawsze pozostaje tablica kodowania i bin2hex ![]() @down co do tego 64bit, jak masz czas, spróbuj zaalokować więcej niż 2gb :] Teoria a praktyka, 2 różne światy, dostępy do binarek(działających!), jak już masz to musisz szukać bibliotek dodatkowych(których nie było w tych binarkach dostarczonych), i samemu kompilować, w tej samej wersji kompilatora, niema takiej w source to masz zonka, szukaj od nowa. Nawet te 64bitowe wersje po odpowiedniej konfiguracji nie chciały zaalokować;> Powinni w końcu coś z tym zrobić. Bynajmniej ja miałem takie doświadczenie z tym. Ni chuj, nie udało mi się tego osiągnąć. Próbowałem gdzieś z 1-2lata temu, do tej pory jak widzę, jest tak samo. Ten post edytował jackraymund 20.04.2014, 12:48:51 -------------------- Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Odnośnie backslashy:
W PHP jak i w masie innych języków służą one za znak ucieczki, tj.: "abc\"def" => abc"def, "abc\\def" => abc\def (bardzo logiczne). Jednak w PHP z jakiegoś powodu uznano, że jeżeli znak ucieczki postawiony jest przed czymś co nie jest znakiem specjalnym (czyli coś innego niż np. \n albo \0) to znak ucieczki pozostanie potraktowany dosłownie, i tak: Kod 123\d321 => 123\d321 123\\d321 => 123\d321 123\n321 => 123 321 123\\n321 => 123\n321 ![]() Czyli w teorii użyty przeze mnie podwójny backslash nie ma znaczenia, bo \\d zostanie zinterpretowane dokładnie tak samo jak \d, ale przynajmniej taki zapis nie korzysta z dziwnych "cudów" PHP-a. ![]() Trzeba tutaj jeszcze zaznaczyć, że czym innym jest znak specjalny w kontekście parsera PHP, a czym innym znak specjalny w kontekście parsera PCRE. Cytat PS. RE: Tak, a znajdź chociaż 64bitową wersje, jedyna opcja to bierz source i sam kompiluj(dobierz odpowiednio flagi biblioteki itd.), to są dopiero uroki... Próbowałem kiedyś zaalokować więcej niż 2gb. Z 2 dni mordęgi i 0 efektów. Eee... chyba większość dystrybucji w paczkach na Linuksa jest 64-bitowa (na 64-bitowych systemach), a dla Windowsa są przygotowane paczki 64-bitowe. Nie mniej jednak za wprowadzenie zmiennej długości typu INT na różnych platformach rodem z C, deweloperom PHP należy się solidny... opiernicz. ![]() Ten post edytował Crozin 20.04.2014, 11:40:30 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Wątpię żeby \n, \0, \t etc zadziałało tak samo w apostrofie i w cudzysłowu, więc imo podwójny backslash jest tutaj zbędny. I fakt używanie tego sprawia problemy ale tylko kiedy używa się cudzysłowia. Można użyć podwójnego kiedy faktycznie chce się użyć backslasha na samym końcu stringa:
A tak to użycie podwójnego wszędzie jest zbędne, o ile jak wcześniej napisałem, używa się apostrofu. Cudzysłów w php wprowadza masę zamieszania imo.. Ten post edytował by_ikar 20.04.2014, 13:02:48 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 15:45 |