允许数字和字符之间有连字符,但去除字符之间的连字符的正则表达式。

3
我正在尝试编写一个正则表达式,允许数字和字符之间使用连字符符号(-),但删除字符之间的连字符符号并将其替换为 PHP 字符串中的空格。我是正则表达式的初学者,不知道如何编写这个正则表达式,有人能帮忙吗?
这里是我在 PHP 中需要的字符串。
$string ="Al-Abbas - Manama - 100" or
$string ="100 - Al-Abbas - Manama"

应用正则表达式后,我需要输出的内容应该像这样。
Al Abbas Manama - 100
100 - Al Abbas Manama 

请帮忙提供其他解决方法

2个回答

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演示


谢谢,但我想让它在数字出现在前面的情况下也能工作,例如:299 - Bandar Al-Seef。 - OBAID
兄弟,我需要一点帮助,你能把这个表达式也改成JS吗? - OBAID
JS 不支持相同的 PCRE 功能,请创建一个新的问题,以便获得更好的答案。 - anubhava

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

如果顺序改变,例如数字先出现,它还能正常工作吗? - OBAID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接