Учитывая следующий ввод –
"I went to 1 ' and didn't see p" , что является регулярным выражением для функции preg_replace PHP, чтобы удалить все одиночные символы (и оставшиеся пробелы), чтобы выход был –
 "went to and didn't see". 
Я искал решение для этого, но не могу его найти. Подобные примеры не включали объяснений регулярного выражения, поэтому я не смог адаптировать их к моей проблеме. Поэтому, пожалуйста, если вы знаете, как это сделать, укажите регулярное выражение, но также сломайте его, чтобы я мог понять, как это работает.
ура
Попробуй это:
 $output = trim(preg_replace("/(^|\s+)(\S(\s+|$))+/", " ", $input)); 
(^|\s+) означает «начало строки или пространства (ов)» (\s+|$) означает «конец строки пространства (ов)» \S – одиночный непространственный символ попробуйте это регулярное выражение
 '\s+\S\s+' -> ' ' 
  попробуйте с помощью array_filter и array_filter 
 $str ="I went to 1 ' and didn't see p"; $arr = explode(' ',$str); function singleWord($var) { if(1 !== strlen($var)) return $var; } $final = array_filter($arr,'singleWord'); echo implode(' ',$final); //return "went to and didn't see"(length=19) 
Вам понадобится два прохода
Первый – снять все одиночные символы
 (?<=^| ).(?=$| ) replace with empty string 
Второй – оставить только отдельные пробелы
 [ ]{2,} replace with single space 
В итоге вы получите строку, которая может содержать пробелы в начале или в конце. Я бы просто обрезал это с помощью вашего языка вместо того, чтобы делать это с помощью регулярного выражения
Например, первое регулярное выражение записывается в php подобно
 $result = preg_replace('/(?<=^| ).(?=$| )/sm', '', $subject);