Heritrix DecidingScope регулярное выражение URI

Я использую HERITRIX для сканирования сайта под названием octetfarm.com. Я хотел бы, чтобы сканер сделал регулярное выражение для URI (или URL), и если присутствует строка "octetfarm", сканер должен принять ее.

Я сделал 2 правила

1 MatchesRegExpDecideRule "ПРИНЯТЬ" и регулярное выражение ".octetfarm."

2 rejectByDefault

Когда я запускаю сканер на octetfarm.com (мой очень простой тестовый сайт), первая страница - это просто ссылка, как показано ниже:

<a href="http://octetfarm.com/layer1/layer1.html">layer1</a>

Почему сканер не следует по той простой ссылке, которая содержит строку "octetfarm".

вот мои правила в XML

 <newObject name="decide-rules" class="org.archive.crawler.deciderules.DecideRuleSequence">
    <map name="rules">
      <newObject name="rejectByDefault" class="org.archive.crawler.deciderules.RejectDecideRule">
      </newObject>
      <newObject name="octetfarm" class="org.archive.crawler.deciderules.MatchesRegExpDecideRule">
        <string name="decision">ACCEPT</string>
        <string name="regexp">*.octetfarm.*</string>
      </newObject>
    </map>
  </newObject>

1 ответ

Регулярное выражение, которое вы перечислили там, не совсем верно; попробуйте это вместо:

<string name="regexp">.*octetfarm.*</string>

Единственная разница между этим и вашим - два предшествующих персонажа octetfarm будучи полностью измененным

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

Эффект этого регулярного выражения в полном случае состоит в том, чтобы соответствовать, если есть 0 или более символов до строки octetfarm видно, а затем 0 или более любых символов.

Заворачивание строки octetfarm с .* любая сторона на самом деле важна только в том случае, если механизм регулярных выражений пытается сопоставить всю строку; Вы можете обнаружить, что для вас может работать только следующее регулярное выражение, так как в зависимости от настроек механизма регулярного выражения он может просто искать любой экземпляр в предоставленном тексте, где он находит совпадение:

<string name="regexp">octetfarm</string>
Другие вопросы по тегам