2011-01-21 2 views
0

Я создаю метод изменения названий страниц в хорошую строку для использования перезаписи URL. Пример: «Последние новости», будет «последние-новости»Regex Replace Очистка строки от нежелательных символов

Проблемы страница названия вне моего контроля, и некоторые из них похожи на следующее: Футбол & регбов Новостей !. В идеале это станет футбольной регби-новостью.

Я проделал определенную работу, чтобы получить это для футбола. & -rugby-news!

Есть ли возможное регулярное выражение для идентификации нежелательных персонажей и дополнительных «-»?

В принципе, мне нужны цифры и буквы, разделенные одним «-».

У меня есть только базовые знания регулярных выражений, и лучшее, что я мог придумать было:

[^a-z0-9-] 

Я не уверен, если я быть достаточно ясно.

+0

Примечание: "и" символ также зарезервированным символ в URLS. –

+0

да, я знаю, в основном я хочу удалить любые символы, которые не являются буквой, числом или тире –

ответ

1

Попробуйте «заменить все» чем-то вроде этого.

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

Замените спички тире.

Альтернативное регулярное выражение:

[^a-zA-Z0-9]+ 

Это один позволит избежать множеств тира, если сам тир находится рядом других нежелательных символов.

+0

Я думал о замене ничем, поэтому он просто удалит его, проблема в том, что у меня есть тире на обоих стороны нежелательного характера я получу 2. Должен ли я передать его через 2 регулярных выражения, может быть? –

+0

Если вы ничего не замените, вы получите «footballrugbynews». И я не понял вашу проблему с тире, но если вы не хотите слишком много тире с вашим регулярным выражением (например, поворачивая «эй-смотри это» на «эй-смотри-это»), удалите тире из регулярное выражение. – 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 
Смежные вопросы