2010-01-05 2 views
1

Я хочу заменить «\», который появляется в каталоге каталога Windows, на «/». Я попытался использовать s//\////g, но это не похоже на трюк.Как заменить «» на «//» в Perl?

+2

Включите предупреждения и вы будете знать, просветление. – Schwern

+0

:) сделаю, Schwern. – fixxxer

+0

Вы говорите, что хотите, чтобы 'C: \ foo \ bar' стал' C: // foo // bar'? –

ответ

2

Я думаю, что это нужно сделать, это: `

$str =~ s{\\}{//}g; 
12
s[\\][//]g 
  • \ нужно экранировать в регулярном выражении
  • /не
  • Избегайте использования/разграничить регулярных выражений секции при использовании/в самом выражении (это делает вещи намного более читаемым!)

... но вы, вероятно, должны использовать что-то вроде Path::Class.

+0

s [\\\] [//] g на «C: \ Documents and Settings \ fixxxer \ Desktop \ abc" дает мне = C: Documents and SettingsfixxxerDesktopabc. Помощь! – fixxxer

+4

\ является escape-символом в строке с двойными кавычками. Поэтому '' C: \ Documents "' пытается интерпретировать '\ D' как особую вещь, например' \ n' для новой строки. Но нет '\ D', поэтому его просто выходит как' D'. Если вы включите предупреждения, Perl сообщит вам «Unrecognized escape». Используйте одинарные кавычки, которые не избегают (почти) чего-либо. Также убедитесь, что ваш ввод - это то, что вы думаете, это простой оператор печати. PS Я бы рекомендовал Path :: Class вместо этого, гораздо более полный и надежный. – Schwern

+1

Использование 's {\\} {//} g' с фигурными скобками, вероятно, является * немного более стандартным, но не слишком большим. Вы можете использовать все виды мусора в качестве разделителей для оператора 's'. :) – fennec

5

Прежде всего, использование другого разделителя, кроме \, сделает ваше регулярное выражение более удобочитаемым.

Затем вы должны заменить \ с \\, или он будет использоваться, чтобы избежать следующий символ (/ в регулярном выражении вы используете).

$link =~ s|\\|//|g; 
+1

Я думаю, что это более читаемо, чем [] [] – user105033

Смежные вопросы