Как очистить грязную строку csv с помощью php regex

моя строка может быть такой:

@ *lorem.jpg,,, ip sum.jpg,dolor ..jpg,-/ ?

на самом деле - это грязная csv строка - с именами изображений jpg

Мне нужно удалить any небуквенные символы - из both sides строки
затем - внутри получившейся строки - убираем такие же - except запятые и точки
затем - удалите повторяющиеся запятые и точки - если они есть - замените их одиночными

так что окончательный результат должен быть:
lorem.jpg,ipsum.jpg,dolor.jpg

Сначала я попытался удалить все пробелы - где угодно

$str = str_replace(" ", "", $str);  

затем я использовал различные формы функций trim - но это утомительно и много кода

дополнительная проблема заключается в том, что дубликаты запятых и точек могут иметь экземпляры one или more - например - .. или ,,,,

есть ли способ решить это с помощью регулярного выражения, пожалуйста?

Это полезно: stackoverflow.com/questions/659025/…

SelVazi 17.01.2023 11:16

После того, как вы удалили пробелы, регулярного выражения (\w+\.\w+) должно быть достаточно, чтобы извлечь все имена файлов с помощью preg_match_all. Затем вы можете использовать implode, чтобы соединить эти результаты с запятой между ними.

CBroe 17.01.2023 11:16

@CBroe - интересно, спасибо, попробую. Но я полагаю, дубликаты запятых и точек все еще являются проблемой

provance 17.01.2023 11:20

Можете ли вы попробовать это $result = preg_replace("/[^A-Za-z0-9,.]/", '', $str);

SelVazi 17.01.2023 11:22

@SelVazi - работает, кроме последней запятой - но я могу удалить ее rtrim. Но не удаляет дубликаты запятых и точек

provance 17.01.2023 11:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Можете ли вы попробовать это:

$string = ' @ *lorem.jpg,,,,  ip sum.jpg,dolor .jpg,-/ ?';
// this will left only alphanumirics
$result = preg_replace("/[^A-Za-z0-9,.]/", '', $string);

// this will remove duplicated dot and ,
$result = preg_replace('/,+/', ',', $result);
$result = preg_replace('/\.+/', '.', $result);

// this will remove ,;. and space from the end
$result = preg_replace("/[ ,;.]*$/", '', $result);

попробовал, работает - кроме дубликатов запятых и точек

provance 17.01.2023 11:42

Я сделал небольшое обновление, чтобы удалить повторяющиеся запятые и точки, вы можете попробовать?

SelVazi 17.01.2023 11:53

Посмотри на

https://www.php.net/manual/ru/function.preg-replace.php

Он заменяет что-либо внутри строки на основе шаблона. \s представляют все пробельные символы, но заботятся о NBSP (неразрывное пространство, \h соответствует ему)

Пример 4

$str = preg_replace('/\s\s+/', '', $str);

Это будет что-то вроде этого

Ответ принят как подходящий

Список смоделированных шагов после ваших слов:

Шаг 1

  • "удалить любые небуквенные символы с обеих сторон строки"

  • переведено: удалить завершающие и завершающие последовательные символы [^a-zA-Z0-9]

  • регулярное выражение: заменить ^[^a-zA-Z0-9]*(.*?)[^a-zA-Z0-9]*$ на $1

Шаг 2

  • "внутри полученной строки - удалить то же самое - кроме запятых и точек"
  • переведено: удалить любые [^a-zA-Z0-9.,]
  • регулярное выражение: заменить [^a-zA-Z0-9.,] пустой строкой

Шаг 3

  • "удалить повторяющиеся запятые и точки - если они есть - заменить их одиночными"
  • переведено: заменить последовательные [,.] как одиночные пример
  • регулярное выражение: заменить (\.{2,}) на .
  • регулярное выражение: заменить (,{2,}) на ,

Демонстрация PHP:

https://onlinephp.io/c/512e1

<?php

$subject = " @ *lorem.jpg,,, ip sum.jpg,dolor ..jpg,-/ ?";

$firstStep = preg_replace('/^[^a-zA-Z0-9]*(.*?)[^a-zA-Z0-9]*$/', '$1', $subject);
$secondStep = preg_replace('/[^a-z,A-Z0-9.,]/', '', $firstStep);
$thirdStepA = preg_replace('(\.{2,})', '.', $secondStep);
$thirdStepB = preg_replace('(,{2,})', ',', $thirdStepA);

echo $thirdStepB; //lorem.jpg,ipsum.jpg,dolor.jpg

большое спасибо, особенно за пояснения

provance 17.01.2023 14:07

Мне нравится заботиться об этих деталях. Это также помогает мне стать лучше. Рад, что это помогло, и спасибо, что указали на аспект «украшения».

Diego D 17.01.2023 14:11

Другие вопросы по теме