Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Wyrażenia regularne - problemy z: #, &, < i in.
f#a#oo
post 17.09.2011, 19:47:02
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.06.2011

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


Witam,
od paru dni męczę się z wyrażeniami regularnymi, a w zasadzie z jakimiś nieregularnymi wyjątkami. Może popełniam gdzieś głupi błąd - będę wdzięczny za zwrócenie uwagi.

Chcę wyłuskać nazwy znaków i ich kodowanie z pliku http://www.sagehill.net/livedtd/html40loos...symbol.ent.html, czyli wrzucić w tablicę Alpha oraz kod /&/#913; z linii:
  1. <!ENTITY Alpha CDATA "?" -- greek capital letter alpha, U+0391 -->


Udało mi się to zrobić okrężnie, ale nie idzie zrobić tego bardziej prostym sposobem.

Dlaczego wyrażanie regularne działa w tej postaci:

  1. $f = file_get_contents('http://www.sagehill.net/livedtd/html40loose/HTMLsymbol.ent.html');
  2. $wyr = '/CDATA "&(.*);/';
  3.  
  4. $p = preg_match($wyr, $f, $m);
  5.  
  6. echo '<pre>';
  7. print_r($m);
  8. echo '</pre>';


A kiedy dodam # to już nie:

  1. $wyr = '/CDATA "&#(.*);/';



Dlaczego "& jest interpretowane jako amp; gdy go nie domykam? Przy:

  1. $wyr = '/CDATA "&(.*);/';


Wyświetla się:

Kod
Array
(
    [0] => CDATA "?
    [1] => amp;#402
)



Dlaczego działa:

  1. $wyr = '/#4.2/';


ale już nie:

  1. $wyr = '/.2/';



Dlaczego działa:
  1. $wyr = '/!ENTITY (\w+)/';


ale już nie:
  1. $wyr = '/<!ENTITY (\w+)/';


Czy to są znaki zakazane? Nie pomaga nawet ich cytowanie (dodanie \). Nie znalazłem ich w wykazie znaków do cytowania. Jak mogę wobec tego znaleźć coś znajdującego się pomiędzy tymi znakami? Może to wina serwera (CBA)?

Ten post edytował f#a#oo 17.09.2011, 19:47:49
Go to the top of the page
+Quote Post

Posty w temacie


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: 31.07.2025 - 09:28