Регулярное выражение с рубином - PullRequest
0 голосов
/ 04 мая 2011

Мое обычное выражение (regex) все еще находится в стадии разработки, и у меня возникает следующая проблема с попыткой извлечь некоторый якорный текст из хеша, где хранится элемент.

Мой хэш выглядит так:

hash["example"] => " <a href=\"../Project.html\">Project</a>, <a href=\"../area1.html\">Area 1</a>"

Мой рубин, из которого пытается сделать извлечение "Project" и "Area 1":

hash["ITA Area"].scan(/<a href=\"(.*)\">(.*)<\/a>/)

Любая помощь будет цениться как всегда.

Ответы [ 4 ]

2 голосов
/ 04 мая 2011

В ваших группах используется жадное сопоставление, поэтому он будет собирать столько, сколько может, например, до < для второй группы. Измените (.*) части на (.*?), чтобы использовать собственническое сопоставление.

Здесь множество сообщений о том, почему вы не должны использовать регулярные выражения для анализа html. Есть много причин, почему ... например, что, если между a и href есть несколько пробелов и т. Д. Было бы идеально использовать инструмент, предназначенный для анализа html.

0 голосов
/ 04 мая 2011

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

0 голосов
/ 04 мая 2011

Каноническая SO причина для использования настоящего парсера HTML: спокойно объяснено прямо здесь.

Однако regexen может разбирает простые фрагменты без особых проблем.

Обновление: Ага, якорный текст.Это на самом деле довольно просто:

> s.scan /([^<>]*)<\/a>/
=> [["Project"], ["Area 1"]] 
0 голосов
/ 04 мая 2011

Вам придется исключить обратную косую черту для обратной косой черты.так что-то вроде ... \\\\ вместо просто \\.Звучит глупо, но у меня была похожая проблема с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...