Come rimuovere parole di carattere singolo da una string con preg_replace

Dato il seguente input:

"I went to 1 ' and didn't see p" 

, qual è l'espressione regolare per la function preg_replace di PHP per rimuovere tutti i singoli caratteri (e lasciato spazi) in modo che l'output sia –

"went to and didn't see".

Ho cercato una soluzione a questo ma non riesco a trovarne uno. Esempi simili non hanno incluso spiegazioni dell'espressione regolare, quindi non sono stato in grado di adattarli al mio problema. Quindi, per favore, se sai come farlo, fornisci l'espressione regolare, ma anche scomposizione per capire come funziona.

Saluti

Prova questo:

 $output = trim(preg_replace("/(^|\s+)(\S(\s+|$))+/", " ", $input)); 
  • (^|\s+) significa "inizio di string o spazio (s)"
  • (\s+|$) significa "fine della string di spazio (i)"
  • \S è un singolo carattere non spaziale

prova questa espressione regolare

 '\s+\S\s+' -> ' ' 

prova con l'aiuto di implode , explode e arrays_filter

 $str ="I went to 1 ' and didn't see p"; $arr = explode(' ',$str); function singleWord($var) { if(1 !== strlen($var)) return $var; } $final = arrays_filter($arr,'singleWord'); echo implode(' ',$final); //return "went to and didn't see"(length=19) 

Avrai bisogno di due passaggi

Il primo è quello di eliminare tutti i singoli personaggi

 (?<=^| ).(?=$| ) replace with empty string 

Il secondo è di lasciare solo singoli spazi

 [ ]{2,} replace with single space 

Si finirà con una string che ha eventualmente spazi all'inizio o alla fine. Vorrei semplicemente ritagliarlo con la tua lingua invece di farlo con una regex

Ad esempio, la prima espressione regolare è scritta in php

 $result = preg_replace('/(?<=^| ).(?=$| )/sm', '', $subject);