正则表达式,允许在数字和字符之间使用连字符,但删除字符之间的连字符

时间:2016-02-24 14:46:03

标签: php regex

我正在尝试编写一个正则表达式,允许在数字和字符之间使用连字符符号( - )但删除字符之间的连字符符号并将其替换为PHP字符串中的空格。我是正则表达式的初学者,不知道如何编写正则表达式,这可以任何一个帮助

这里我需要的是我在PHP中有这样的字符串

$string ="Al-Abbas - Manama - 100" or
$string ="100 - Al-Abbas - Manama"

应用正则表达式后我需要的输出必须像

Al Abbas Manama - 100
100 - Al Abbas Manama 

任何其他方式请帮助

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

$string ="Al-Abbas - Manama - 100"

$repl = preg_replace('/\d\h*-\h*(*SKIP)(*F)|-(?!\h*\d)/', ' ', $string);
    如果连字符在数字之后,
  • \d\h*-\h*(*SKIP)(*F)将失败 如果连字符旁边有数字,
  • (?!\h*\d)将无法断言

RegEx Demo

答案 1 :(得分:0)

您可以使用纯PHP:

$string1 ="Al-Abbas - Manama - 100";
$string2 ="100 - Al-Abbas - Manama";

function convertString($string) {
    $strArr = explode("-", $string);
    $new = '';
    foreach ($strArr AS $key => $val) {
        $val = trim($val);
        if (is_numeric($val)) {
            if ($key === 0) $new .= $val . " - ";
            else            $new .= " - " . $val;
        } else {
            $new .= " " . $val;
        }
    }
    return $new;
}

echo convertString($string1); //output: Al Abbas Manama - 100
echo convertString($string2); //output: 100 - Al Abbas Manama