Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> preg_match polskie znaki, ucina pierwszą literę
melior
post
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

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


Witam,

  1.  
  2. $regex = "/\b(.*).pl\b/i";
  3. $result = preg_match($regex, $line, $matches);


Funkcja ma wyłapywać z tekstu domeny .pl i niby wszystko działa oprócz sytuacji, gdy pierwsza litera należy do polskiego alfabetu, wtedy też ją ucina.
Np.

Dla:
żaba.pl
Otrzymam
aba.pl

Ale gdy mam:
ażaba.pl
Otrzymam
ażaba.pl

Any help smile.gif?
Go to the top of the page
+Quote Post
vermis
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


daj przykład tekstu i popraw wyrażenie, bo '.'(kropka) to znak specjalny.


--------------------
Go to the top of the page
+Quote Post
melior
post
Post #3





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

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


onet.pl 10-11-27 17:03 10-12-11 17:03 10-12-16 17:03
wp.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04
interia.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04
pwr.wroc.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04
żagań.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04
Go to the top of the page
+Quote Post
vermis
post
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Zrobiłem szybki test i działa:
  1. $string = "onet.pl 10-11-27 17:03 10-12-11 17:03 10-12-16 17:03
  2. wp.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04
  3. interia.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04
  4. pwr.wroc.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04
  5. żagań.pl 10-11-27 17:04 10-12-11 17:04 10-12-16 17:04";
  6.  
  7. $a = explode("\n", $string);
  8. foreach ($a as $line) {
  9. //$regex = "/^(.*)\.pl/i";
  10. $regex = "/\b(.*)\.pl\b/i";
  11. $result = preg_match($regex, $line, $matches);
  12. echo $matches[0] . "<br/>";
  13. }


wynik:
onet.pl
wp.pl
interia.pl
pwr.wroc.pl
żagań.pl



--------------------
Go to the top of the page
+Quote Post
melior
post
Post #5





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

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


A mi niestety nie.
Można sprawdzić samemu.

Link do strony

  1. <?php
  2. if (!empty($_POST['add'])){
  3. if ($_POST['text']){
  4.  
  5. $text = $_POST['text'];
  6.  
  7. foreach(preg_split("/(\r?\n)/", $text) as $line){
  8.  
  9. $regex = "/\b(.*)\.pl\b/i";
  10. $result3 = preg_match($regex, $line, $matches3);
  11.  
  12. if ($result3){
  13. echo $matches3[0]."<br />";
  14. }
  15.  
  16. }
  17. }
  18. }
  19.  
  20.  
  21. echo '
  22. <form method="POST" action="">
  23. <center>
  24. <textarea name="text" style="width:640px; height:240px;"></textarea><br />
  25. <input type="submit" name="add" value="dodaj">
  26. </center>
  27. </form><br />';
  28. ?>
Go to the top of the page
+Quote Post
Quadina
post
Post #6





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


Z tego co widzę, to jest kwestia błędu w jakiejś tam bibliotece w PHP 5.2.x, problem został rozwiązany w 5.2.8. Możesz w ramach poprawienia tego błędu u siebie użyć po prostu preg_match_all(), ewentualnie możesz potraktować tekst iconv() z UTF-8//IGNORE i też powinien dać odpowiedni efekt. Bierze się to z faktu, że polskie znaki nie są kodowane jako sam znak, tylko jako dwa znaki zwykle zapisywane jako ~o = ó lub ~a => ą. zatem tylda na początku tekstu podawanego do preg_match zadziała jak znak specjalnie (nie pamiętam co oznaczający) i wycięty z wyniku.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
mieszkos
post
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 11
Dołączył: 1.04.2009

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


preg_match ma problemy z UTF8.. ;> http://gynvael.coldwind.pl/?id=360
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 Aktualny czas: 21.08.2025 - 19:45