Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_match polskie znaki
Forum PHP.pl > Forum > PHP
melior
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?
vermis
daj przykład tekstu i popraw wyrażenie, bo '.'(kropka) to znak specjalny.
melior
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
vermis
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

melior
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. ?>
Quadina
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.
mieszkos
preg_match ma problemy z UTF8.. ;> http://gynvael.coldwind.pl/?id=360
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.