【问题标题】:Regex Replace Cleaning a string from unwanted characters正则表达式替换从不需要的字符中清除字符串
【发布时间】:2011-06-13 01:25:21
【问题描述】:

我正在创建一种方法来将页面标题修改为一个好的字符串,以便使用 URL 重写。 示例:“最新消息”,将是“最新消息”

问题是页面标题超出了我的控制范围,其中一些类似于以下内容: 足球和橄榄球新闻!。理想情况下,这将成为足球橄榄球新闻。

我已经完成了一些工作,以便将其发布到足球和橄榄球新闻中!

是否有可能的正则表达式来识别其中不需要的字符和额外的“-”?

基本上,我需要用一个“-”分隔的数字和字母。

我只有基本的正则表达式知识,我能想到的最好的方法是:

[^a-z0-9-]

我不确定我在这里是否足够清楚。

【问题讨论】:

  • 注意:“&”字符也是URLS中的保留字符。
  • 是的,我知道,基本上我想删除任何不是字母、数字或破折号的字符

标签: regex string url-rewriting replace


【解决方案1】:

这个 Perl 脚本也可以满足您的需求。当然,除了硬编码之外,您还必须通过其他方式将字符串提供给它;我只是把它放在那里作为例子。

#!/usr/bin/perl

use strict;
use warnings;

my $string = "Football & Rugby News!";
$string = lc($string); # lowercase

my $allowed = qr/a-z0-9-\s/; # all permitted characters

$string =~ s/[^$allowed]//g; # remove all characters that are NOT in $allowed
$string =~ s/\s+/-/g; # replace all kinds of whitespace with '-'

print "$string\n";

打印

football-rugby-news

【讨论】:

    【解决方案2】:

    尝试用类似的方式“全部替换”。

    [^a-zA-Z0-9\\-]+
    

    用破折号替换匹配项。

    替代正则表达式:

    [^a-zA-Z0-9]+
    

    如果在其他不需要的字符附近发现破折号本身,这将避免多个破折号。

    【讨论】:

    • 我想什么都不用替换,所以它只会删除它,问题是如果我在不需要的字符的两边都有一个破折号,我会得到 2。我应该通过 2可能是正则表达式?
    • 如果你什么都不替换,你会得到'footballrugbynews'。而且我不理解您的破折号问题,但是如果您不希望正则表达式使用太多破折号(例如将“嘿 - 看这个”变成“嘿---看这个”),请从正则表达式。
    • 太好了,也许我解释得不好,我在那里传递带有破折号的字符串,我想保留破折号。但是使用第二个正则表达式并用破折号替换是我想要的。干杯
    猜你喜欢
    • 2016-04-03
    • 2018-03-06
    • 2012-04-26
    • 1970-01-01
    • 2022-08-15
    • 2013-01-21
    • 2018-07-13
    • 2017-02-04
    相关资源
    最近更新 更多