Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/01/2017, 12:00
jhonnyalexander_91
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: script de búsqueda, no se como obtener los valores

Buenos días desde Colombia,

Analizando el problema podemos ver que hay un patrón para definir los campos dentro de la consulta, siempre y cuando se cumpla el patrón la consulta es válida. De tal manera, podemos echar mano de una expresión regular que extraiga los datos:

`Si está entre corchetes es opcional y los puntos suspensivos significan repetición`
Libro C [ : V [ - Vf ] [ , ... ] ]

Siendo:
- `Libro` el nombre del libro
- C el capítulo correspondiente
- V el verso que puede ser opcional
- Vf el verso final, que nos sirve para seleccionar un rango y es opcional
- Por último se puede seleccionar varios rangos o versos.

El patrón es muy poco variable y se puede hacer un análisis manual del texto (sin RegExp) pero sería complicar el código aunque este sería más eficiente. Yo, según el caso, diría que es mejor usar una expresión regular como la siguiente:

Código PHP:
<?php $pattern '/^(\w+)\s+(\d+)(?:\s*:\s*(\d+(?:\s*-\s*(?:\d+)|))(?:\s*,\s*(\d+(?:\s*-\s*(?:\d+)|)))*)?$/';
Esta habría que compararla contra cada una de las búsquedas y ya estaría preparada para hacer la captura

Prueba de concepto:
Código PHP:
<?php

$queries 
explode (';''Genesis 3:2, 8-7; Mateo 3:15-8; jueces 1');
$pattern '/^(\w+)\s+(\d+)(?:\s*:\s*(\d+(?:\s*-\s*(?:\d+)|))(?:\s*,\s*(\d+(?:\s*-\s*(?:\d+)|)))*)?$/';

foreach (
$queries as $subject) {
    
$matches = [];
    
preg_match ($patterntrim($subject), $matches);
    
var_dump ($matches);
}