Contactos

Parser Universal PHP Contenido. Escribimos el analizador de contenido en PHP. Leyendo un archivo en la línea PHP con fgets ()

Decidí dar un artículo a la forma real. Anteriormente, la página HTML universal PHP se presentó en esta página. Pero durante más de 4 años ha pasado, he trabajado más experiencia en el campo del desarrollo del analizador. Y decidí presentar un nuevo ejemplo de PHP Parser con un análisis detallado del algoritmo de trabajo.

La última versión de Parser llevaba un título orgulloso de Universal, pero era una designación muy subjetiva. El guión tuvo muchas restricciones, por su uso completo, se requirió conocimiento en expresiones regulares en PHP y JS.

Pensé, pensé y decidí que una decisión más versátil sería mostrar un ejemplo de un analizador en PHP y decir cómo funciona. Así que los programadores que anteriormente no escribieron los analizadores podrán resolver sus tareas. Y los clientes podrán comprender las posibilidades de PHP en el campo de la página de la página del sitio y lo que realmente puede requerir programadores.

Analizador - Este es un programa que analiza los datos de texto de entrada, recupera la información necesaria y según los datos obtenidos, proporciona el resultado en un formato dado.

El algoritmo de análisis General PHP supone que su script hace una consulta en una dirección determinada, recibe una respuesta del servidor como una página HTML, o en algún otro formato de texto, como CSV, JSON, XML. Además, la información obtenida se analiza, a partir de la misma se recupera (analizando) los datos necesarios sobre la base de los cuales se forma el resultado. Los datos obtenidos se pueden mostrar en la pantalla, o escribir en un archivo o una base de datos.

Ejemplo de un simple contenido de PHP Paraser HTML

Supongamos que necesitamos recurrir el precio de las mercancías en el sitio Gearbest.com. El script lee la página especificada, luego a través de expresiones regulares, analiza su contenido y resalta las rodajas de código HTML que necesita. A continuación, el resultado se muestra en la pantalla.

/ Nosotros "; $ buffer \u003d matriz (); preg_match ($ REGEXP, $ PAGO, $ BUFFER); $ res_arr [" precio_list "] [" moneda "] \u003d $ buffer; $ res_arr [" error "] \u003d" "; ) Otra cosa ($ res_arr ["precio"] \u003d 0; $ res_arr ["moneda"] \u003d "nodata"; $ res_arr ["error"] \u003d "Error de carga de página";) devuelva $ res_arr;) / * 1.4 - - Salida de datos en HTML * / / * --- 1.4.1 --- Traducción de los precios * / Función Price_List_html ($ precio_list) (Echo

Precio: "$ precio_list [" precio "]". "$ Precio_list [" moneda "]".

";) / * --- 1.4.2 --- Salida de error * / Función ERROR_LIST_HTML ($ ERROR) (si (! Error ($ ERROR)) (ECHO"

Durante el procesamiento de la consulta, se producen los siguientes errores:

\\ n "; echo"
    \\ N "; foreach ($ error como $ error_row) (echo"
  • ". $ error_row".
  • \\ n ";) echo"
\\ n "; echo"

Estado: Fallar

\\ n ";) otra cosa (echo"

Estado: está bien.

\\ n ";)) / * --- 1.4.3 --- Disposición de errores de carga de página * / Función ERROR_PAGE_LIST_HTML ($ ERROR_PAGE) (si (! Error ($ ERROR_PAGE)) (ECHO"
    \\ n "; foreach ($ error_page como $ error_row) (echo"
  • [". $ error_row."] "$ error_row" - ". $ error_row".
  • \\ n ";) echo"
\\ n ";)) / * --- 1.4.4 --- Salida de la operación de la secuencia de comandos * / FUNCIÓN RUN_TIME_HTML ($ TIME_START) (si (! Vacío ($ TIME_START)) ECHO"\\ n ";) / * --- 2 --- Obteniendo contenido del directorio de la marcha * / if ($ acción) (// Si no hay errores y los datos del formulario de búsqueda recibidos si (! vacío ($ engranish_url)) ($ gearbest_url \u003d recortar ($ gearbest_url); $ din_url \u003d $ gearbest_url; $ res_arr \u003d get_gearbest_price ($ din_url); $ price_list \u003d $ res_arr ["precio_list"]; $ error_page \u003d $ res_arr ["error_page"]; $ error \u003d $ Res_arr ["Error"];) Else ($ error \u003d "No se hace la dirección de la página con los productos";)) / * --- 3 --- Retiro de los resultados del trabajo del analizador * /? \u003e

Artículos de precios de Parrer en Gearbest.com

!}


index.php. - El principal archivo PHP del script del analizador. El código del analizador es relevante en el momento de la publicación. Con el tiempo, el código de sitio HTML de la fuente puede cambiar y las expresiones regulares ya no se acercarán.

Hay diferentes maneras de instalar el script. Trabajé con él desde debajo de Xampp. Pero puedes ejecutar el analizador con derecho. Solo vierta el archivo index.php. A su sitio en cualquier carpeta y acceda a ella a través de la barra de direcciones del navegador. Supongamos que tomaste el script a la carpeta. -Parser. En el directorio raíz de su hosting. Luego, debe marcar la URL en la barra de direcciones: http: //vashdomen.ru/my-parser/.

Captura de pantalla de la página principal de los precios del analizador de GearBest.com:

1. En la página principal del analizador, debemos ingresar la dirección de la página del producto. Después de hacer clic en el botón "Inicio", la página se reinicia, los datos del formulario en el servidor y el script PHP hacen una consulta en una dirección dada utilizando la biblioteca de rizo.

Para esta acción responde la función. curl_get_contents ()que es la función de PHP estándar analógica file_get_contents ()Pero con una funcionalidad extendida basada en rizos.
rizo - Esta es una extensión para PHP, que proporciona soporte de funciones libcurl. Este conjunto de características le permite formar solicitudes de publicación y solicitar, descargar archivos. Se admiten diferentes protocolos HTTP, HTTPS, FTP. Puede usar servidores proxy, cookies y autenticación de usuario. En general, una excelente herramienta para imitar acciones de usuario en el navegador.

el rizo es algo muy útil para el desarrollo del analizador HTML, y en uno de los cuales le diré más detalles sobre las recepciones de trabajar con él con el propósito de analizar.

Tenga en cuenta que el script ve una página en formato de texto y analiza su código HTML.

3. El siguiente paso se forma y se muestra en la pantalla resultante según los datos después de analizar. En nuestro caso, esta es la moneda y el precio de los bienes.

Por lo tanto, para el desarrollo exitoso de los analizadores en el programador PHP, debe poder trabajar con la biblioteca de rizo y las expresiones regulares de PHP.

Cómo Poule Data cifrada

En algunos casos, el servidor proporciona páginas HTML en un formulario comprimido o protegido, como la codificación de aceptación: GZIP. En este caso, la conexión de los formatos de compresión compatibles en la consulta puede no afectar el formato de respuesta.

En tales casos, debe descifrar la respuesta, por ejemplo, la función estándar de PHP gzdecode (). Y luego puedes trabajar en el viejo esquema.

Los datos a través del algoritmo base64 se pueden descifrar por la función bASE64_ENCODE ().

PHP Parser HTML Site de forma gratuita

En realidad, la respuesta a la pregunta donde tomar los sitios de PHP Parser de forma gratuita, simple, escríbalo usted mismo. El algoritmo base del trabajo de los analizadores, descrito anteriormente en detalle.

Puede buscar ya listo, escrito por las soluciones de alguien para su tarea. Pero para hacer un analizador que aborde todas las opciones en la máquina, probablemente sea imposible. Bajo cada tipo de tarea, debe desarrollar su producto específico.

Y para aquellos que no quieren bañarse con expresiones regulares y configuraciones de analizador, estoy listo para hacerlo refinamiento para usted, pero, por supuesto, costará dinero :-).

El costo final de los servicios de desarrollo se determina después de recibir una tarea técnica específica. El precio se establece estrictamente antes de comenzar el trabajo, durante el flujo de trabajo, las condiciones financieras no cambian. trabajo en 100% prepago. El pedido mínimo es 2000 rublos.

A menudo, el precio del analizador es bastante alto, y esto se debe al hecho de que el desarrollo se obtiene único, afilado bajo un cliente específico. Varios Hay opciones para la entrada de melón, se requiere un resultado de salida individual.

En este caso, también puedes formar un analizador para ti. Por ejemplo, el precio del desarrollo del analizador resultó ser de 9,000 rublos. Está buscando a 9 personas con un problema similar y recolectar 1000 rublos de ellos, ordenar el desarrollo de un analizador. Luego haces 10 copias, 1 nosotros y 9 Dar a tus conocidos.

En el siguiente ciclo de artículos, mostraré ejemplos de la implementación de analizadores más complejos, etc.

En general, mis queridos lectores, de lo que pude ayudar, leer, aprender y no olvidar vincularse con el blog.

Si necesita hacer un documento HTML de análisis, las expresiones regulares no son la mejor manera de esto. Además, su proceso de escritura, trabajo intensivo en mano de obra, y reducen la velocidad de la aplicación PHP. En este artículo, aprenderá cómo usar su analizador HTML gratuito, para leer, cambiar, extraer algunos elementos DOM de las páginas HTML. Además, un recurso HTML puede ser una fuente externa. Es decir, la dirección de las páginas HTML en otro dominio. Usando como ejemplo, sitio sitear.ruAprenderá cómo obtener y mostrar una lista de todos los materiales publicados en la página principal del sitio. En otras palabras, hará lo que necesita, HTML PIRS usando PHP. En este caso, PHP está implícito por la simple biblioteca HTML DOM.

Simplemente siga todos los pasos del artículo, ¡y aprenda mucho y útil para usted mismo!

Paso 1 - Preparación

Para empezar, necesitas descargar una copia. html simplebibliotecas. Descargar gratis.

En el archivo encontrará varios archivos, pero solo necesitamos uno, simple_html_dom.php.. Todos los demás, estos son ejemplos y documentación.

Paso 2 - Análisis de lo básico HTML

Esta biblioteca es muy fácil de usar, pero aún así, es necesario desmontar algunos conceptos básicos antes de usarlo.

$ Html \u003d nuevo simple_html_dom (); // carga de una cadena $ html-\u003e carga ("

¡Hola Mundo!

"); // cargar un archivo $ html-\u003e load_file (" http: // sitio / ");

Todo es simple, puede crear un objeto descargando HTML desde la cadena. O descargue el código HTML del archivo. Puede descargar el archivo por la dirección URL, o con su sistema de archivos local (servidor).

Importante recordar:El método Load_File () funciona en el uso de características de PHP File_Get_Contents. Si está en su archivo php.ini, el parámetro Permitir_url_fopen no se establece como verdadero, no podrá recibir archivos HTML en una dirección remota. Pero, puede cargar estos archivos utilizando la biblioteca de rizo. A continuación, lea el contenido utilizando el método de carga ().

Obtenga acceso a los objetos DOM HTML


Supongamos que ya tenemos un objeto DOM, una estructura, como en la imagen de arriba. Puede comenzar a trabajar con él usando el método Buscar () y creando colecciones. Las colecciones son grupos de objetos que se encuentran usando selectores: sintaxis en algo similar a jQuery.

¡Hola Mundo!

ESTABAN AQUÍ.



Usando este ejemplo de código HTML, aprendemos cómo acceder al preso de la información en el segundo párrafo (P). Además, cambiaremos la información recibida y obtendremos el resultado en la pantalla.

// crear un objeto de analizador y recibir html incluyen ("Simple_html_dom.php"); $ Html \u003d nuevo simple_html_dom (); $ Html-\u003e cargar ("

¡Hola Mundo!



"); // obtener matrices de los párrafos $ Elemento \u003d $ HTML-\u003e Buscar (" P "); // Cambiar información dentro del párrafo de $ Element-\u003e InnerText. \u003d" Y "estamos aquí para quedarse"; // Salir Echo $ html-\u003e guardar ();

Como puede ver para implementar el análisis de PHP del documento HTML, es muy fácil usar la biblioteca Simple HTML DOM. En principio, en esta pieza de código PHP, todo se puede entender de manera intuitiva, pero si dudas de algo, veremos el código.

Línea 2-4: Conecte la biblioteca, cree un objeto de clase y cargue el código HTML de la línea.

Línea 7: Con esta línea, encontramos todo.

etiquetas en el código HTML, y guardamos en una variable como una matriz. El primer párrafo tendrá índice 0, los párrafos restantes se indexarán de acuerdo con 1,2,3 ...

Línea 10: Recibimos los contenidos del segundo párrafo en nuestra colección. Su índice será 1. También realizamos cambios en el texto usando el atributo de EgosText. El atributo de EgosText cambia todos los contenidos dentro de la etiqueta especificada. También podemos cambiar la etiqueta en sí mismo utilizando el atributo de extracción.

Agregemos otra línea de código PHP con la que asignamos la clase de estilo a nuestro párrafo.

$ Element-\u003e clase \u003d "class_name"; Echo $ html-\u003e guardar ();

El resultado de la ejecución de nuestro código será el siguiente documento HTML:

¡Hola Mundo!

Estamos aquí y estamos aquí para quedarnos.



Otros selectores

A continuación se muestran otros ejemplos de selectores. Si usaste jQuery, entonces en la simple biblioteca HTML DOM, la sintaxis es ligeramente similar.

// Obtenga el primer elemento con id \u003d "foo" $ single \u003d $ html-\u003e encontrar ("# foo", 0); // recibe todos los elementos con clase \u003d "foo" $ collection \u003d $ html-\u003e Buscar al analizar); // obtiene todas las etiquetas Con la colección $ \u003d $ html-\u003e encontrar ("a") analizando; // obtiene todas las etiquetas que se colocan en la etiqueta

$ Colección \u003d $ html-\u003e encontrar ("H1 A"); // obtiene todas las imágenes con title \u003d "(! Lang: himom" $collection = $html->find("img"); !}

Utilizando el primer selector con documento HTML PHP PARS, muy simple y comprensible. Su singularidad es que devuelve solo un elemento HTML, a diferencia de otros que devuelven una matriz (colección). El segundo parámetro (0), indicamos que solo necesitamos el primer elemento de nuestra colección. Espero que entiendan todas las variantes de los selectores Simple HTML SELECTOR SELECTORES si no entiende algo, intente el método del experimento científico. Si no lo ayudó, póngase en contacto con el artículo.

Documentación Simple HTML DOM

En esta dirección se puede encontrar documentación completa para usar la biblioteca Simple HTML DOM.

http://simplehtmldom.sourceforge.net/manual.htm.

Solo dale una ilustración que muestra las posibles propiedades del elemento HTML DOM seleccionado.


Paso 3 - Ejemplo real PHP analizando el documento HTML

Para el ejemplo del análisis, y traer el HTML DOM en acción, escribiremos materiales más graves en el sitio web del sitio. A continuación, retiraremos todos los artículos en forma de una lista en la que se indicarán los nombres de los artículos. Al escribir Grabrov, recuerde, ¡el robo del contenido es procesado! Pero no en el caso de que la página valga la pena una referencia activa al documento de origen.


Incluir ("simple_html_dom.php"); $ artículos \u003d matriz (); Getarticles ("http: // sitio /");

Comience con la conexión de la biblioteca y la llamada de la función. getarticles Que pasará los documentos HTML de acuerdo con la dirección de la página que se transmite como un parámetro de función.

También especificamos una matriz global en la que se almacenarán toda la información sobre los artículos. Antes de comenzar el documento HTML de análisis, veamos cómo se ve.

Esta es la plantilla básica de esta página. Al escribir un analizador HTML, debe examinar cuidadosamente el documento, ya que los comentarios, como, estos también son descendientes. En otras palabras, a los ojos de la simple biblioteca HTML DOM, estos son elementos que son equivalentes a otras etiquetas de la página.

Paso 4: escriba la característica principal de PHP Paraser HTML

Función Getticles ($ Página) (Global $ Artículos; $ html \u003d nuevo simple_html_dom (); $ html-\u003e load_file ($ Página); // ... Siguiente ...)

Inicialmente, llamamos a nuestra matriz global que hemos indicado anteriormente. Crea un nuevo objeto simple_html_dom. A continuación, descargue la página que haremos PARS.

Paso 5 - Encuentra la información deseada

$ artículos \u003d $ html-\u003e encontrar ("DIV"); Foreach ($ artículos como $ nombres) ($ artículos \u003d matriz ($ post-\u003e Niños (0) -\u003e texto simple);)

En esta pieza de código, todo es extremadamente simple, encontramos todo el div con clase \u003d name_material. A continuación, leemos la colección de elementos y elegimos los nombres de los materiales. Todos los materiales se guardarán en la matriz en este formulario:

$ Artículos \u003d "Nombre del material 1"; $ Artículos \u003d "Nombre del material 2"; ...

Paso 6 - Mostrar resultado del parido

Para empezar, instalaremos algunos estilos, para la belleza de la información mostrada que recibió durante el análisis.

Artículo (relleno: 10px; Color: # 600; Fuente: Bold 40px / 38px Helvetica, Verdana, Sans-Serif;)

"Echo $ artículo; echo"

"; } ?>

El resultado de la ejecución de este script será una lista de títulos de artículos en el sitio del sitio.

Conclusión

Así que aprendimos los documentos HTML de separación de PHP. Recuerda que el análisis es un proceso largo. Una página puede analizar aproximadamente un segundo. Si realiza una gran cantidad de documentos HTML, su servidor puede revertir la operación de script en relación con la expiración del tiempo establecido para la ejecución. Esto se puede corregir utilizando la función SET_TIME_LIMIT (240); 240 - esta vez en segundos, asignado para ejecutar el script.

Este artículo está destinado a formar los conceptos básicos de la página HTML por PHP. Hay otras bibliotecas y métodos de análisis. Si conoces aquellos, comparten los comentarios. Estaré encantado de saber qué instrumentos y métodos HTML del análisis son usted.



Para analizar la página del sitio web (es decir, para desmontar su código HTML), debe obtenerse para empezar. Y luego el código recibido se puede desmontar utilizando expresiones regulares y, o de alguna manera, analizarla, o guardarla en la base de datos o ambas.

Obteniendo páginas del sitio usando File_Get_Contents

Entonces, para empezar, reunámonos para recibir las páginas de los sitios en la variable PHP. Esto se hace utilizando la función. file_get_contents.Sin embargo, que se usa más a menudo para obtener datos del archivo, puede usarse para obtener la página del sitio, si no puede transferirlo al archivo al archivo, sino la URL de la página del sitio.

Tenga en cuenta que esta característica no es perfecta y hay una biblioteca analógica más poderosa RizoLo que le permite trabajar con cookies, con titulares, le permite enviar formas y proceder por redirecciones. Todo esto file_get_contents. No sabe cómo, sin embargo, para el principio, ella bajará y trabajará con Rizo Analizaremos en la siguiente lección.

Por lo tanto, obtenga la página principal de mi sitio, por ejemplo, y llevemos a la pantalla (hágalo):

Lo que recibirá como resultado: en la pantalla verá la página de mi sitio, sin embargo, lo más probable es posible sin estilos e imágenes CSS (ya sea que funcione CSS y las imágenes, depende del sitio, por qué lo verá más tarde. ).

Vamos a traer la página del sitio, pero su código fuente. Lo escribimos a la variable. $ Str. y traer a la pantalla usando var_dump:

Tenga en cuenta que var_dump Debe configurarse correctamente en la configuración de PHP (consulte la lección anterior para esto). CORRECTAMENTE: significa que debe ver las etiquetas y no debe haber restricciones a la longitud de la cadena (el código de la página del sitio puede ser muy grande y deseable para verlo todo).

Entonces, si todo se hace bien, y ves el código fuente de la página del sitio, es hora de llegar a su despedida con expresiones regulares.

Si no conoce expresiones regulares o duda de su conocimiento, es hora de aprender el libro de texto sobre expresiones regulares y luego regresar al estudio de esta Guía de Partes.

Permitir la directiva_url_fopen debe habilitarse http://php.net/manual/ru/filesystem.configuration.php#ini.allow-url-fopen

Analizando con expresiones regulares

Al intentar desmontar el código HTML con la ayuda de expresiones regulares, estará esperando algunos escollos. Su presencia se debe con mayor frecuencia al hecho de que las expresiones regulares no están destinadas a desarmar las etiquetas: hay herramientas más avanzadas para esto, por ejemplo, la biblioteca de phpquery, que nos desmontaremos en las siguientes lecciones.

Sin embargo, ser capaz de usar expresiones regulares de parida También es importante, primero, regularmente, es simple (si ya los conoce, es simple) y una herramienta popular para analizar, en segundo lugar, trabaja regularmente un pedido más rápido que cualquier biblioteca (a menudo es crítica), y tercero , incluso cuando se usa bibliotecas especiales, la necesidad sigue ahí de todos modos.

Rocas submarinas

Primero La sorpresa que te espera cuando usas preg_match y preg_match_all. - Esto es lo que trabajan solo para las etiquetas, ubicadas completamente en la misma línea (es decir, no tienen un ingreso presionado). Si intenta renunciar a una etiqueta de múltiples líneas, no tendrá éxito hasta que encienda modo de una sola línea Usando modificador s.. De esta manera:

Segundo La sorpresa lo está esperando cuando intenta trabajar con Cyrillic, en este caso, no debe olvidarse de escribir un modificador u. (U pequeño, no para ser confundido con excelente), como este:

¿Qué otras escollas te están esperando? Nos desmarcaremos gradualmente durante esta lección.

Intentemos desarmar las etiquetas

Queemos de alguna manera (por ejemplo, a través de file_get_contents.) Recibió el código de sitio HTML. Aquí lo tienes:

Este es el título de la testle. Este es el contenido principal de la página.

Vamos a lidiar con su análisis. Primero, vamos a conseguir los contenidos de la etiqueta. , Taga <head>, y etiqueta <body>.</p> <p>Entonces, obtenemos los contenidos de la etiqueta. <title> (en la variable <b>$ Str.</b> El código HTML que desmontamos) se almacenan:</p> <p> <?php preg_match_all("#<title>(.+?)#Su ", $ str, $ res); var_dump ($ res);?\u003e

Contenido :

(.+?)#Su ", $ str, $ res); var_dump ($ res);?\u003e

Contenido :

(.+?)

#Su ", $ str, $ res); var_dump ($ res);?\u003e

En general, no hay nada complicado, solo tenga en cuenta que tanto las esquinas de las etiquetas como el plano de la etiqueta de cierre no deben estar protegidas (esta última es verdadera si el limitador regular regular no está en silencio /, pero, por ejemplo, la celosía . Ahora).

Sin embargo, de hecho, nuestras regularidades regulares no son perfectas. Bajo algunas condiciones, ellos solo se niega al trabajo. Debe estar preparado para esto: sitios que se pintará, diferentes (a menudo todavía están desactualizados), y lo que funciona bien en un sitio, puede dejar de trabajar en el otro.

¿Qué hacemos mal? En realidad etiqueta - La misma etiqueta, así como el resto y en él puede ser atributos. La mayoría de las veces es el atributo de la clase, pero otros pueden ser (por ejemplo, onload. Para ejecutar javascript).

Entonces, reescribe la tarjeta regular con los atributos:

(.+?)

#Su ", $ str, $ res); var_dump ($ res);?\u003e

Pero aquí estamos equivocados, con más errores. Primero - no debe ser puesto más + , y estrella * porque más sugiere la disponibilidad al menos un símbolo - Pero después de todos los atributos de la etiqueta no puede ser, y en este caso entre el título de la etiqueta cuerpo. Y no habrá símbolos con la esquina, y nuestro regularmente guardará (no está claro lo que escribí aquí, enseñe regularmente).

Replantaremos este problema y volveremos a una discusión adicional:

(.+?)

#Su ", $ str, $ res); var_dump ($ res);?\u003e

Segundo El problema es el siguiente: Si dentro Habrá otras etiquetas (y por lo que estará en la vida real), entonces nuestro regular Ganchos demasiado. Por ejemplo, considere un código de este tipo:

Este es el título de la testle.

Regular encontrará ne. Como se esperaba, y

Párrafo(

) - Porque no limitamos su codicia. Hazlo: lugar Escribir - En este caso, todo estará bien.

Pero una mejor opción escribirá en lugar de un diseño. [^>] (no cerrar esquina), como esto - ] *?\u003e En este caso, somos completamente insuficientes de los problemas de este tipo, ya que regularmente nunca puede obtener la etiqueta.

Obteniendo un bloque en la identificación

Veamos el siguiente código:

Este es el título de la testle.

Contenido
Más div.


Escribimos un bloque regular que recibirá el contenido del bloque con ID Igual contenido.

Entonces, el intento número uno (no por completo):

#(.+?)

#Su.

¿Qué pasa aquí? El problema con los espacios, después de todo, entre el título de la etiqueta y el atributo puede ser cualquier hueco, al igual que alrededor es igual en atributos.

Todos los problemas de este tipo son esenciales, incluso si se desmonte regularmente una página del sitio, esto no significa que averigüe otra página: puede ser completamente alrededor que sea igual al atributo de identificación podría poner espacios, y luego su regularmente guardará.

Por lo tanto, el analizador regular debe construir para que vayan a tantos problemas como sea posible. - En este caso, su analizador funcionará lo más correcto posible en todas las páginas del sitio, y no solo en aquellos que ha marcado.

Vamos a arreglar nuestra regularidad regular:

#

(.+?)
#Su.

Preste atención al hecho de que no hay espacios alrededor de las brechas, y puede que no sea, por lo que hay un operador de repetición * .

Además, antes de la esquina de cierre de la etiqueta, también puede haber espacios (y puede que no sea), lo tomamos en cuenta esto:

#(.+?)

#Su.

Por lo tanto, ya es mejor, pero aún no es ideal, después de todo, puede haber otros atributos alrededor del atributo ID, por ejemplo:

. En este caso, nuestro coche regular ahorrará. Pidemos que puede haber otros atributos:

#

(.+?)
#Su.

Tenga en cuenta que después

Es regular .+? , y antes > Es regular .*? - Esto no es un error y concebido, porque después
Asegúrese de ir al espacio (es decir, al menos un personaje será exactamente), y antes > Puede que no sea ningún otro atributo en absoluto (excepto nuestra identificación) y puede que no sea un espacio.

La regularidad se ha vuelto aún mejor, pero hay un problema: es mejor no usar un punto en los bloques de tipo .*? - ¡Podemos agarrarnos superfluos a salir de nuestra etiqueta (recuerde el ejemplo anterior con el cuerpo?). Mejor usar [^>] - Esta es una garantía de seguridad:

#

] +? ID \\ S *? \u003d \\ S *? "Contenido" [^\u003e] *? \u003e (. +?)
#Su.

Siguiente problema: las cotizaciones en los atributos pueden ser solteros y dobles (ni siquiera pueden ser en absoluto si el valor del atributo es una palabra, pero este caso es raro: no lo consideraremos si cumple con un sitio de este tipo: es más fácil escribir regularmente especialmente para él). Así que ten a cuenta esto:

#] +? ID \\ S *? \u003d \\ S *? ["\\"] Contenido ["\\"] [^\u003e] *?\u003e (. +?)

#Su.

Tenga en cuenta que la presentación única es caxia: lo hacemos, ya que las cotizaciones externas de la cadena PHP también son solteras, aquí: aquí:

En general, el bien regular es bueno, pero a veces vaya más lejos y hace que la primera cuna de la etiqueta coincida con el segundo (excluimos un ID \u003d "contenido"). En este caso, están haciendo esto, la primera cotización caerá en el bolsillo, y la segunda cotización se indica por el bolsillo para coincidir con el primero:

#] +? ID \\ S *? \u003d \\ S *? (["\\"]) Contenido \\ 1 [^\u003e] *?\u003e (. +?)

#Su.

Para nuestra tarea, no es particularmente necesario (puede estar exactamente seguro de qué id \u003d "contenido" es poco probable que esté en algún lugar), pero hay atributos donde es esencial. Por ejemplo, en este caso:

- El atributo de título puede ser una sola conexión y regular título \\ S *? \u003d \\ S *? ["\\"] (. +?) ["\\"] sacar el texto " Historia sobre D."- Porque la búsqueda se realiza antes de la primera cotización.

Pero regularmente title \\ s *? \u003d \\ s *? (["\\"]) (. +?) \\ 1 Será manejado correctamente

e incluso
.

El problema de los bloques anidados.

En nuestro regular, hay otro problema, no puede trabajar con bloques anidados. Por ejemplo, si dentro del sofá #content hay otro DIV, regularmente encontrará el texto al primer cierre

, no para la diva de cierre para #content. Un ejemplo de un código de problema:

Este es el título de la testle.

DIV INTERIOR CONTENIDO
Contenido


Nuestro regularmente se retira solamente

DIV INTERIOR CONTENIDO
- Quédate en la primera
. ¿Qué hacer en este caso?

¿Qué hacer en este caso? Primero, siempre es necesario estar listo para esta ocasión, incluso si no hay bloques anidados en las páginas del sitio en estudio, pueden estar en otras páginas o aparecer más tarde (si el sitio está analizando más de una vez, y periódicamente) .

Bueno, qué hacer, solo necesitas estar atado a

y a lo que está bajo nuestro bloque (en nuestro caso bajo contenido). En el código de abajo debajo de ella