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

正则表达式用连字符替换特殊字符,除了第一个和最后一个

尤博达
2023-03-14

$alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", trim(strtolower($name)));

这工作正常,所以如果歌曲名称是这是*是*(歌曲)名称,它将创建别名这是歌曲名称。但是,如果名称在开头或结尾有特殊字符*这是一首歌曲(名称),它将创建 - 这是一首歌名称 - 在两端创建连字符。

共有2个答案

凤高翰
2023-03-14

您可以分2个步骤执行:

    $alias = preg_replace("/(^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$)/", "", trim(strtolower($name));
    $alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", $alias);
    

    (我还没有测试过,但你可能会明白这个想法)

    范甫
    2023-03-14

    您需要进行双重替换。

    $str = '*This is a song (name)';
    $s   = preg_replace('~^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$~', '', $str);
    echo preg_replace('~[^a-zA-Z0-9]+~', '-', $s);
    
     类似资料:
    • 我试图使用正则表达式来检查字符串中的第一个和最后一个字符是否是a-z之间的字母字符。 我知道这与第一个字符匹配: 但是我如何检查最后一个字符呢? 这: 不起作用。我怀疑这两个条款之间应该有什么区别,但我不知道是什么!

    • 我正在学习正则表达式并尝试处理一个小任务。 我将输入量作为字符串,并将其转换为美元格式。 输入字符串如下所示 输出字符串看起来像这样 使用正则表达式,我试图避免使用below正则表达式在输入量中出现前导零和逗号。例如,如果输入类似 我正在用 除了前导零之外,我无法替换可能存在的任何其他字符。例如,如果输入中已经存在“$”,则转换时会出现错误。我不知道该怎么办。

    • 问题内容: 我正在寻找符合以下规则的正则表达式。 允许的字符 字母:az / AZ 数字:0-9 特殊字符:〜@#$ ^&*()-_ + = [] {} | \,。?:( 应允许使用空格) 不允许 特殊字符:<>’“ /;`% 问题答案: 对于允许的字符,您可以使用 验证应仅由允许的字符组成的完整字符串。请注意,在结尾处(否则将是一个范围),并且转义了几个字符。 对于无效字符,您可以使用 检查他们

    • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?

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

    • 问题内容: 我很难提出一个正则表达式,该正则表达式实际上会将某些特殊字符列入黑名单。 我需要使用它来验证输入字段中的数据(在Java Web应用程序中)。我们希望允许用户输入任何数字,字母(我们需要包括带重音的字符,例如法语或德语)和一些特殊字符,例如’-。等等 如何将诸如<>%$等的字符列入黑名单? 问题答案: 我只是将角色列入白名单。 使用正则表达式构建黑名单同样简单,但是你可能需要添加更多字