Способ частичного совпадения строки Ruby с помощью Regexp - PullRequest
1 голос
/ 28 апреля 2010

Я работаю над двумя делами:

предположим, у меня есть эти переменные:

a = "hello"
b = "hello-SP"
c = "not_hello"
  1. Любые частичные совпадения
    Я хочу принять любую строку, которая имеет переменную a внутри, поэтому b и c будут соответствовать.

  2. узорное совпадение
    Я хочу сопоставить строку, которая содержит a внутри, затем '-', поэтому b будет соответствовать, c - нет.

У меня проблема, потому что я всегда использовал синтаксис /expression/ для определения Regexp, так как динамически определить RegExp на Ruby?

Ответы [ 2 ]

6 голосов
/ 28 апреля 2010

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

  reg1 = /#{a}/

будет соответствовать любому значению переменной a (в момент создания выражения!) И

  reg2 = /#{a}-/

будет делать то же самое, плюс дефис, поэтому hello- в вашем примере.

Редактировать: Как указывает Уэйн Конрад, если a содержит «любые символы, которые будут иметь особое значение в регулярном выражении», вам необходимо их избежать. Пример:

a = ".com"
b = Regexp.new(Regexp.escape(a))
"blah.com" =~ b
0 голосов
/ 08 мая 2015

Поздно комментировать, но я не смог найти то, что искал. Вышеупомянутые ответы мне не помогли. Надеюсь, это поможет кому-то новичку в ruby, который просто хочет быстро исправить.

Рубиновый код:

st = "BJ's Restaurant & Brewery"
    #take the string you want to match into a variable
    m = (/BJ\'s/i).match(string)  #(/"your regular expression"/.match(string))
    # m has the match #<MatchData "BJ's">
    m.to_s
    # this will display the match  
 => "BJ's" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...