Динамический Regex в Ruby

Я нашел рецензию Автора Обзора HTTP ( RFC 2617 ) очень полезный в понимании использования и потребности в IVS / данные случаи.

7
задан davidsmalley 1 August 2009 в 07:39
поделиться

2 ответа

Вам не хватает только одного:

>> Regexp.new "\w"
=> /w/
>> Regexp.new "\\w"
=> /\w/

Обратные косые черты - это escape-символы в строках. Если вам нужна буквальная обратная косая черта, вам нужно ее удвоить.

>> string = "[ALERT] Project: Revision ...123456 committed by Me <me@me.com>\n on 2009-   07-28 21:21:47\n\n    Fixed typo\n"
=> "[ALERT] Project: Revision ...123456 committed by Me <me@me.com>\n on 2009-   07-28 21:21:47\n\n    Fixed typo\n"
>> r = Regexp.new("[A-Za-z]+: Revision ...[\\w]+ committed by [A-Za-z\\s]+")
=> /[A-Za-z]+: Revision ...[\w]+ committed by [A-Za-z\s]+/
>> string[r]
=> "Project: Revision ...123456 committed by Me "

Обычно, если вы вставляете вывод из ваших «разорванных» строк, а не только ввод, вы, вероятно, заметили бы, что w и s не экранировались должным образом

11
ответ дан 6 December 2019 в 23:11
поделиться

Вариант 1:

 # Избегайте косой черты:
r = Regexp.new ("[A-Za-z] +: Редакция ... [\\ w] + подтверждена [A-Za-z \\ s] +")

Недостаток: вручную экранировать все известные escape-символы

Вариант 2:

 # Использовать косые черты в конструкторе
r = Regexp.new (/ [A-Za-z] +: Редакция ... [\ w] + подтверждена [A-Za-z \ s] + /)

Недостаток: Нет

0
ответ дан 6 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: