2016-08-13 5 views
-2

мне нужно заменить все в строке с пробелами, за исключением нескольких символов и те:Нужна помощь о Perl регулярное выражение замещения

all letters, 
all numbers, 
a blank space and 
. ? ! -/: @ 

Ну мне нужна процедура, которая:

$string =~ s/[^ characters needed from above]/ /gi; 

Но результат не такой, как я ожидал. Вероятно, не очень хорошо сбежал. Он заменяет некоторые символы, а некоторые нет. Или он заменяет половину текста. Кто-нибудь знает, как правильно написать это выше? Спасибо.

+0

Позвольте мне угадать - потому что у вас есть '! - \ /'? Побег дефиса. –

+0

[См. Здесь] (https://regex101.com/r/zV8xC4/1) – dawg

ответ

0
  • Письма: \ рл
  • Digits: \ г (Вы сказали, что номер, но я думаю, что вы имеете в виду цифры)
  • Пробелы: \ s (я предполагаю, что это то, что вы имеете в виду под "пустое пространство")

Так,

s/[^\pL\d\s.?!\-\/:\@]/ /g; 

Я предполагаю, что вы имели в виду «пространство», когда вы сказали, что вы хотели, чтобы заменить символы, используя «пустое пространство».

+0

Но как насчет: s/[^ a-zA-Z0-9. \? \! \ - \ /: \ @]//г; –

+0

Он не заменяет все буквы и цифры. Он не заменяет никаких пробелов. Посторонние косые черты влияют на читаемость – ikegami

+0

Спасибо за ответ. Но у меня уже этот код, и он работает не так, как ожидалось. Письма отлично работают с a-zA-Z0-9. Проблема заключается в следующих символах. ? ! - /: @ Я не знаю, что нужно избегать, а что нет. Когда я использую их в замещении, они заменяют символы и заменяют буквы после них. Например: [код] $ url = http: // *? =) (/ &% $ # "!" # $% & /() =? *. Com $ url = ~ s/[^ \ pL \ d \ s.?! \ - \ /: \ @]// g; [/ code] Он также заменяет «.com», что означает, что он оставляет в качестве результата только http: //. Any идеи о том, как это решить? –