Обнаружить целочисленное значение внутри строки, изменить его и оставить на том же месте в строке

Допустим, у нас есть строка, которая выглядит примерно так:

10.000 some text 5.200 some text 5.290 some text

Что я хочу сделать, так это удалить последний ноль (если он присутствует) из всех существующих значений int в данной строке, результат должен быть:

10.00 some text 5.20 some text 5.29 some text

Есть ли удобный способ сделать это? Строки в основном сложнее, чем в приведенном примере, поэтому я ищу способ определить целочисленное значение, проверить, заканчивается ли оно 0, обрезать этот ноль и оставить измененное целочисленное значение в том же месте внутри строки.

Вы уже знакомы с регулярными выражениями? Если нет, начните их изучать. regex101.com/r/8CR3mD/1 — если вы используете такой шаблон с preg_replace и заменяете совпадение содержимым группы захвата, вы должны быть так же хороши, как и там.

CBroe 01.04.2022 12:53

Спасибо Cbroe, ваше решение в значительной степени то, что мне нужно, а также ответ, который я принял. Удачного дня :)

Čendi 01.04.2022 14:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
1
2
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Самый быстрый способ:

$str = '10.000 some text 5.200 some text 5.290 some text';
echo str_replace('0 ',' ', $str);

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

ChristianM 01.04.2022 13:00

Хотя решение довольно простое и может сработать, теоретически, как упомянул Кристиан, я никогда не знаю, появится ли недесятичная цифра, так что это может все испортить. Спасибо за попытку.

Čendi 01.04.2022 14:58
Ответ принят как подходящий
$text = '10.000 some text 5.200 some text 5.290 some text';

$result = preg_replace('(0(?=[^0-9.]))', '', $text);

echo $result;   // Output: 10.00 some text 5.20 some text 5.29 some text

Детали шаблона регулярного выражения:

(             Start capturing group
  0           Capturing group must start with a 0
  (?=         Start positive lookahead (meaning peek to the next character in the text)
    [^0-9.]   Make sure that the next character is not a digit or a dot
  )           End positive lookahead
)             End capturing group

Спасибо lukas за решение, а также за подробное объяснение, определенно потребуется некоторое время, чтобы больше изучить возможности регулярных выражений в будущем. Ты сделал мой день, наслаждайся остальным.

Čendi 01.04.2022 14:56

@Čendi Обратите внимание, что существуют тестовые онлайн-сайты RegEx (например, regex101.com), они могут оказаться полезными.

lukas.j 01.04.2022 14:59

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