моя строка может быть такой:
@ *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 - например - .. или ,,,,
есть ли способ решить это с помощью регулярного выражения, пожалуйста?
После того, как вы удалили пробелы, регулярного выражения (\w+\.\w+) должно быть достаточно, чтобы извлечь все имена файлов с помощью preg_match_all. Затем вы можете использовать implode, чтобы соединить эти результаты с запятой между ними.
@CBroe - интересно, спасибо, попробую. Но я полагаю, дубликаты запятых и точек все еще являются проблемой
Можете ли вы попробовать это $result = preg_replace("/[^A-Za-z0-9,.]/", '', $str);
@SelVazi - работает, кроме последней запятой - но я могу удалить ее rtrim. Но не удаляет дубликаты запятых и точек






Можете ли вы попробовать это:
$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);
попробовал, работает - кроме дубликатов запятых и точек
Я сделал небольшое обновление, чтобы удалить повторяющиеся запятые и точки, вы можете попробовать?
Посмотри на
https://www.php.net/manual/ru/function.preg-replace.php
Он заменяет что-либо внутри строки на основе шаблона. \s представляют все пробельные символы, но заботятся о NBSP (неразрывное пространство, \h соответствует ему)
Пример 4
$str = preg_replace('/\s\s+/', '', $str);
Это будет что-то вроде этого
"удалить любые небуквенные символы с обеих сторон строки"
переведено: удалить завершающие и завершающие последовательные символы [^a-zA-Z0-9]
регулярное выражение: заменить ^[^a-zA-Z0-9]*(.*?)[^a-zA-Z0-9]*$ на $1
[^a-zA-Z0-9.,] пустой строкой(\.{2,}) на .(,{2,}) на ,<?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
большое спасибо, особенно за пояснения
Мне нравится заботиться об этих деталях. Это также помогает мне стать лучше. Рад, что это помогло, и спасибо, что указали на аспект «украшения».
Это полезно: stackoverflow.com/questions/659025/…