Регулярное выражение с отрицательным взглядом в Ruby - Как мне сопоставить только "\ (" и not "(" в Ruby? - PullRequest
2 голосов
/ 06 марта 2011

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

title(Hello+World)             #=> [title, Hello+World]
title(\(Hello+World\))         #=> [title, \(Hello+World\)]
title((Hello+World))           #=> [title, (Hello+World)]
title(Well+Hello+World+!)      #=> [title, Well+Hello+World+!]
title(Well+\(Hello+World\)+!)  #=> [title, Well+\(Hello+World\)+!]
title(Well+(Hello+World)+!)    #=> [title, Well+(Hello+World)+!]

Какой самый простой способ извлечь строку из начального ( и конечного ) токена,учитывая, что токен может находиться в любом месте строки, которую он извлекает?

1 Ответ

2 голосов
/ 06 марта 2011

Я не уверен, что эти обратные слеши должны остаться результатом или нет, но вот тот, без этого, и да, я не использую здесь отрицательный взгляд.

.scan(/(\w+)\(((?:\([^)]+\)|[^()]+)+)\)/)

=> [
["title", "Hello+World"], 
["title", "(Hello+World)"], 
["title", "(Hello+World)"], 
["title", "Well+Hello+World+!"], 
["title", "Well+(Hello+World)+!"], 
["title", "Well+(Hello+World)+!"]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...