я ищу 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
Любая помощь приветствуется
Используйте preg_replace("/(\d)-/", "$1")






ты можешь сделать это вот так
$string = preg_replace('/-/',' ',$string);
также вы можете сделать это без использования регулярного выражения
$string = str_replace('-','',$string);
$string = strtr($string, '-', '');
Это будет делать больше, чем требует OP (удалить, например, @, тогда как OP запрашивает только -), и будет делать то, что OP явно не хочет (удаляет тире между буквами).
Он по-прежнему делает то же самое. Подоконник убирает - там, где этого не должно быть.
preg_replace('/(?<=\d)-(?=\d)/', '', $string)
Найдите все дефисы, которым предшествует цифра и за которой следует цифра, и уничтожьте их.
не справляется с чем-то вроде x-y-z-2
Это будет вам полезно;
<?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');
@Amadan, извините, x-y-x - это опечатка, и я ее отредактировал