2014-02-04 6 views
2

Я пишу ruby ​​и нуждаюсь в некоторой помощи с регулярным выражением. И я действительно noob в regexp. У меня есть строка, как этотRegex соответствует строке, исключая первый символ

/hello/world 

Я хотел бы #gsub этой строки, чтобы изменить второй слэш в% 2F. Задача для меня игнорировать первую косую черту и изменить только второй слэш. Я попробовал это один

[^/]/ 

но он выбирает не чистый слеш, но о/ в

/hello/world 

Пожалуйста, помогите мне. Благодаря!!

ответ

2

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

"/hello/world".gsub(/([^\/])\//, '\1%2F') #=> "/hello%2Fworld" 

Или если вы просто хотите, чтобы соответствовать любому /, который появляется после первого символа, вы может упростить это:

"/hello/world".gsub(/(.)\//, '\1%2F')  #=> "/hello%2Fworld" 

Или так:

"/hello/world".gsub(/(?<!^)\//, '%2F') #=> "/hello%2Fworld" 
+0

В то время как мы в этом, '" /hello%2Fwolrd".sub('lr», 'гх')'. Так как вы используете '\ 1', можете использовать' sub'. –

+0

@CarySwoveland Woops сделал опечатку во время тестирования. Спасибо –

+0

Это работает, только если строка начинается с '/' – pguardiario

1

Вы должны использовать подшаблон в () для находят подстроки:

/^\/(.*)$/ 

или

/^.(.*)$/ 

этот образец за исключением первого символа. А потом заменить / в этих подстроках

0

(?!^\/)\/

http://rubular.com/r/IRWptAJdLs является рабочим примером.

+0

^Это правильный ответ. "/hello/world".sub(/(?!^\/)\//, '') =="/helloworld " – DiegoSalazar

+2

Tsk! Ай! Вы предлагаете использовать негативный взгляд на самопринятое «regex noob», без каких-либо объяснений! –

1

И теперь для уродливой, regexless альтернатива:

"/hello/world".split("/").tap(&:shift).unshift("/").join("") 

Я вижу себя вне.

0

изменение второй / к %2F:

'/hello/world'.sub /(\/.*?)\//, '\1%2F' 
#=> "/hello%2Fworld" 
Смежные вопросы