2011-01-21 11 views
0

URLの書き換えを使用するために、ページタイトルを適切な文字列に変更する方法を作成しています。 例:「最新ニュース」、「最新ニュース」になりRegex Replace不要な文字列のクリーニング

問題は、ページのタイトルは私のコントロール外であり、一部には、次のと似ています: サッカー&ラグビーニュース!理想的には、これはサッカーラグビーニュースになるでしょう。

私はこれをサッカーにしようとしました。& -rugby-news!

余分な「 - 」や不要な文字を識別する可能性のある正規表現はありますか?

基本的には、数字と文字を1つの ' - 'で区切って入力する必要があります。

は、私が唯一の正規表現の基本的な知識を持っている、と私が思い付くことができる最高だった:私はここに明確に十分なされていた場合

[^a-z0-9-] 

私はよく分かりません。

+0

注: "&" の文字も、URLの予約文字です。 –

+0

はい、私は基本的には、文字、数字またはダッシュではない文字を削除したいと考えています –

答えて

1

「すべてを置き換える」をこのようなもので試してみてください。

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

マッチをダッシュ​​で置き換えます。

代替正規表現:

[^a-zA-Z0-9]+ 

ダッシュ自体が他の不要な文字の近くに発見された場合は、この1は、複数のダッシュを避けることができます。

+0

私は何も置き換えて考えていなかったので、それを削除します、問題は私が私は2を得るでしょうか?おそらく2正規表現を通すべきでしょうか? –

+0

何も置き換えないと、 'soccerrugbynews'が得られます。そして、ダッシュであなたの問題を理解できませんでしたが、あなたの正規表現であまりにも多くのダッシュを欲しがらないなら(ちょっと - これを 'ちょっと見てください - これを見てください')、ダッシュを正規表現。 – mdrg

+0

偉大な、私はよく説明しなかったかもしれない、私はそこにダッシュで文字列を渡していた、と私はダッシュを保持するためにしたかった。しかし、二番目の正規表現を使ってダッシュを置き換えることは、私が望むように機能しました。乾杯 –

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