Регулярное выражение php удаляет тире только с цифр

я ищу reg exp для замены дефисов (-) только в словах, содержащих цифры

Примеры

string : x-y-z 1-2-3-4 should become x-y-z 1234 (x-y-z stays and 1-2-3-4 replace dashes)

string : 1-2-3-4 should become 1234

string : x-y-z should stay x-y-z

Любая помощь приветствуется

@Amadan, извините, x-y-x - это опечатка, и я ее отредактировал

ntan 10.10.2018 08:28

Используйте preg_replace("/(\d)-/", "$1")

Mohammad 10.10.2018 08:34
Стоит ли изучать 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
2
67
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

ты можешь сделать это вот так

$string = preg_replace('/-/',' ',$string);

также вы можете сделать это без использования регулярного выражения

$string = str_replace('-','',$string);

$string = strtr($string, '-', '');

Это будет делать больше, чем требует OP (удалить, например, @, тогда как OP запрашивает только -), и будет делать то, что OP явно не хочет (удаляет тире между буквами).

Amadan 10.10.2018 08:30

Он по-прежнему делает то же самое. Подоконник убирает - там, где этого не должно быть.

Andreas 10.10.2018 12:20
Ответ принят как подходящий
preg_replace('/(?<=\d)-(?=\d)/', '', $string)

Найдите все дефисы, которым предшествует цифра и за которой следует цифра, и уничтожьте их.

не справляется с чем-то вроде x-y-z-2

I_ATE_YOUR_WORK_FILES 10.10.2018 08:47

Это будет вам полезно;

<?php
$inputStr = 'x-y-z 1-2-3-4 x-y-z';

$outputStrWords = [];
$inputStrWords = explode(' ', $inputStr);
foreach ($inputStrWords as $key => $word) {
    $charactersInWord = explode('-', $word);
    $allCharsDigit = true;
    foreach ($charactersInWord as $char) {
        $allCharsDigit &= is_numeric($char) ? true : false;
    }

    $outputStrWords[$key] = $word;
    if ($allCharsDigit) {
        $outputStrWords[$key] = str_replace('-', '', $word);
    }
}

$outputStr = implode(' ', $outputStrWords);

echo $outputStr; exit;

Попробуй это:

$x = preg_replace('/(?=(^|\s)\d+)-|-(?=\d+(\s|))/', '', 'x-y-z 1-2-3-4');

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