0

我正在寻找一个正则表达式来仅从包含数字的单词中替换破折号 (-)

例子

字符串:xyz 1-2-3-4 应该变成 xyz 1234(xyz 保持不变,1-2-3-4 替换破折号)

字符串:1-2-3-4 应该变成 1234

string : xyz 应该保持 xyz

任何帮助都会得到帮助

4

4 回答 4

2
preg_replace('/(?<=\d)-(?=\d)/', '', $string)

找到所有前面有一个数字和后面跟着一个数字的破折号,然后对它们进行核对。

于 2018-10-10T06:32:39.067 回答
0

这将对您有所帮助;

<?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;
于 2018-10-10T06:43:20.760 回答
0

试试这个:

$x = preg_replace('/(?=(^|\s)\d+)-|-(?=\d+(\s|))/', '', 'x-y-z 1-2-3-4');
于 2018-10-10T06:45:00.780 回答
-2

你可以这样做

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

你也可以不使用正则表达式

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

$string = strtr($string, '-', '');
于 2018-10-10T06:28:57.267 回答