Каков наилучший способ сопоставить идентификаторы с регулярным выражением в Hpricot? - PullRequest
0 голосов
/ 02 декабря 2009

Используя абрикос, довольно легко увидеть, как я могу извлечь все элементы с заданным идентификатором или классом, используя селектор CSS. Можно ли извлечь элементы из документа, основываясь на том, совпадает ли какой-либо атрибут этих элементов с каким-либо регулярным выражением?

1 Ответ

1 голос
/ 02 декабря 2009

Если вы имеете в виду сделать что-то вроде:

doc.search("//div[@id=/regex/]")

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

result = doc.search("//div")
result.delete_if (|x| x.to_s !~ /regex/)

Есть много альтернативных подходов. В этой теме есть два других предложения: Hpricot и Regular Expression .

Обратите внимание: в зависимости от того, что именно вы пытаетесь сопоставить, вы можете использовать «Поддерживаемые, но разные» синтаксисы, доступные в Hpricot Wiki , например:

E[@foo$=“bar”] 

Соответствует элементу E, чье «foo» Значение атрибута заканчивается точно строка «bar»

...