当前位置: 首页 > 知识库问答 >
问题:

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

益楷
2023-03-14

我正在尝试编写一个正则表达式,允许数字和字符之间使用连字符(-),但删除字符之间的连字符,并用PHP字符串中的空格替换它。我是正则表达式的初学者,不知道如何编写正则表达式,有人能帮我吗

这里我需要的是一个类似于PHP的字符串

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

在应用正则表达式后,我需要的输出必须是这样的

Al Abbas Manama - 100
100 - Al Abbas Manama 

还有其他方法吗?请帮忙

共有2个答案

任云瀚
2023-03-14

您可以使用纯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
贺海
2023-03-14

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

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

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

正则表达式演示

 类似资料:
  • 我正在尝试编写一个正则表达式以允许数字和中间只有一个hypen(不能在开始或结束时)说模式:,是可以接受的,但模式:或或或或是不可接受的 我试过这样做,但这将允许-在开始时,也允许多个- 我不太擅长正则表达式,所以一点解释会很有帮助。 编辑:很抱歉再次打扰你,但我需要的数字只有2位(123-346)应被视为无效。

  • 我在ASP.NET应用程序中有一个textbox,我需要使用正则表达式来验证用户输入字符串。要求字符串的连字符总数只能为一个。 匹配项: null 测试--您好 -测试- 测试-您好--

  • 本文向大家介绍利用正则表达式提取固定字符之间的字符串,包括了利用正则表达式提取固定字符之间的字符串的使用技巧和注意事项,需要的朋友参考一下 前言 在JS的正则零宽断言匹配中,只支持前瞻匹配,不支持后瞻。这就尴尬了,因为在业务当中,我们大多时候是知道了要目标数据的前后缀字符串,但是并不想连同前后缀一起获取。 为了模拟后瞻,我想,要不就用笨方法,先将前后缀字符串一同提取,然后再讲前后缀字符串一同rep

  • 我需要用骆驼大小写字符和 替换一些驼峰大小写字符。 我得到的是这样一个字符串: 这些字符串通过正则表达式将数字与街道分开: 现在,我有两个问题。 > 我非常不擅长正则表达式。 上面的regex还删除了街道名称中的每一个,在德国和欧洲有很多这样的名称。 实际上,调整正则表达式以不剪切任何连字符非常容易,但我想了解正则表达式的工作原理,因此我决定尝试找到一个正则表达式,它只是替换字符串中的每个骆驼大小

  • 其中,我需要包括连字符和空格。 这意味着还必须可以输入值“”。

  • 使用具有-(hypen)的正则表达式验证字符串 要求是:字符串只包含数字和-(连字符),不以-(连字符)结尾,所有其他数字不相同。 上面的一个只允许数字和连字符,但不限制以连字符结尾,并检查所有其他数字是否相同。 前任: