2012-05-08 18 views
10

He estado usandoExplota un párrafo en oraciones en PHP

explode(".",$mystring) 

para dividir un párrafo en oraciones. Sin embargo, esto no cubre las oraciones que han concluido con diferente puntuación, como! ? :;

¿Hay alguna manera de utilizar una matriz como delimitador en lugar de un solo carácter? Alternativamente, ¿hay alguna otra forma ordenada de dividir usando varios signos de puntuación?

me trataron

explode(("." || "?" || "!"),$mystring) 

es de esperar, pero no funcionó ...

+0

el uso de expresiones regulares para que coincida con el patrón y almacenar el valor de una variable, pasar esa variable como parámetro para explotar – sree

+0

Eche un vistazo a http://stackoverflow.com/questions/5032210/php-sentence-boundaries-detection – Boby

Respuesta

6

Usted puede hacer:

preg_split('/\.|\?|!/',$mystring); 

o (más simple):

preg_split('/[.?!]/',$mystring); 
+1

Este método elimina las paradas completas, etc. de la cadena final. – 472084

0

Uso preg_split y darle una expresión regular como [\ |. \ ?!] dividir en

0
$mylist = preg_split("/[\.|\?!:;]/", $mystring); 
0

No puede tener múltiples delimitadores para explotar. Eso es lo que preg_split(); es para. Pero incluso entonces, explota en el delimitador, por lo que obtendrá oraciones devueltas sin los signos de puntuación. Puede tomar preg_split un paso más allá y la bandera a devolverlos en sus propios elementos con PREG_SPLIT_DELIM_CAPTURE y luego ejecutar algún bucle de implosionar frase y después marca el punteado en la matriz devuelta, o simplemente utilizar preg_match_all();:

preg_match_all('~.*?[?.!]~s', $string, $sentences); 
1
preg_split('/\s+|[.?!]/',$string); 

Un posible problema podría ser si hay una dirección de correo electrónico, ya que podría dividirla en una nueva línea a la mitad.

2

Suponiendo que en realidad se desea que las marcas de signos de puntuación con el resultado final, ¿ha intentado:

$mystring = str_replace("?","?---",str_replace(".",".---",str_replace("!","!---",$mystring))); 
$tmp = explode("---",$mystring); 

lo que dejaría a sus signos de puntuación en el tacto.

0

Usted puede intentar preg_split

$sentences = preg_split("/[\.\?\!,;]+/", $mystring); 

Tenga en cuenta que esto eliminar los signos de puntuación. Si desea que se deben eliminar espacios en blanco iniciales o finales, así

$sentences = preg_split("/[\.\?\!,;]+\s+?/", $mystring); 
11

Puede utilizar preg_split() combinado con un PCRE lookahead condition a dividir la cadena después de cada ocurrencia de ., ;, :, ?, !, ..mientras se mantiene la puntuacion real intacta:

Código:

$subject = 'abc sdfs. def ghi; this is [email protected]! asdasdasd? abc xyz'; 
// split on whitespace between sentences preceded by a punctuation mark 
$result = preg_split('/(?<=[.?!;:])\s+/', $subject, -1, PREG_SPLIT_NO_EMPTY); 
print_r($result); 

Resultado:

Array 
(
    [0] => abc sdfs. 
    [1] => def ghi; 
    [2] => this is [email protected]! 
    [3] => asdasdasd? 
    [4] => abc xyz 
) 
Cuestiones relacionadas