php - preg_match - preg_split cómo incluir el delimitador de división en los resultados?
preg_split php ejemplo (2)
Tengo este patrón simple que divide un texto en puntos
$text = preg_split("/[/.:!/?]+/", $text);
Pero quiero incluir. : o! al final de los elementos de la matriz
IE ahora para "good: news.everyone!" yo tengo:
array("good","news","everyone","");
pero lo que quiero es:
array("good:","news.","everyone!","");
Aqui tienes:
preg_split(''/([^.:!?]+[.:!?]+)/'', ''good:news.everyone!'', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
Cómo funciona: el patrón en realidad convierte todo en un delimitador. Luego, para incluir estos delimitadores en la matriz, puede usar la constante PREG_SPLIT_DELIM_CAPTURE
. Esto devolverá una matriz como:
array (
0 => '''',
1 => ''good:'',
2 => '''',
3 => ''news.'',
4 => '''',
5 => ''everyone!'',
6 => '''',
);
Para deshacerse de los valores vacíos, use PREG_SPLIT_NO_EMPTY
. Para combinar dos o más de estas constantes, usamos el bitwise |
operador. El resultado:
array (
0 => ''good:'',
1 => ''news.'',
2 => ''everyone!''
);
No se utiliza para PREG_SPLIT_DELIM_CAPTURE
si usa una apariencia positiva detrás de su patrón. La función mantendrá los delimitadores.
$text = preg_split(''/(?<=[.:!?])/'', ''good:news.everyone!'', 0, PREG_SPLIT_NO_EMPTY);
Si usas lookbehind
, solo buscará el personaje sin emparejarlo. Por lo tanto, en el caso de preg_split()
, la función no descartará el carácter.
El resultado sin el indicador PREG_SPLIT_NO_EMPTY
:
array (
0 => ''good:'',
1 => ''news.'',
2 => ''everyone!'',
3 => ''''
);
El resultado con el indicador PREG_SPLIT_NO_EMPTY
:
array (
0 => ''good:'',
1 => ''news.'',
2 => ''everyone!''
);
Puede probarlo utilizando este comprobador de funciones en línea de PHP .