Учитывая следующий ввод –
"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);