Регулярное выражение в SPARQL: почему [[: alnum:]] не возвращает совпадений?

Я хочу найти ресурс Викиданных, соответствующий определенному веб-сайту. Это мой запрос

SELECT DISTINCT ?resource ?instanceOfLabel ?website
WHERE
{
    ?resource wdt:P856 ?website.
        FILTER (REGEX(str(?website), 'http(s)?://(\\w.)?smh.com.au/$')) .
  }           
} 

(ссылка здесь), который не возвращает никакого результата. Это не то, чего я ожидал, так как

SELECT DISTINCT ?resource ?instanceOfLabel ?website
WHERE
{
    ?resource wdt:P856 ?website.
        FILTER (REGEX(str(?website), 'http(s)?://www.smh.com.au/$')) .           
} 

(ссылка здесь)


person CptNemo    schedule 15.08.2016    source источник
comment
Как вы думаете, что означает (\\w.)? Я имею в виду, что вы ожидаете от него сопоставить и как он отражает сценарий веб-сайта?   -  person UninformedUser    schedule 15.08.2016


Ответы (1)


Шаблон \w (пишется \\w для экранирования \) означает одну букву, но, как я понял, вы ожидаете три w буквы.

Чтобы сопоставить три w, вы должны использовать

'http(s)?://(w{3}.)?smh.com.au/$'

Хотя в чем проблема использования www?

'http(s)?://(www.)?smh.com.au/$'

Если вы хотите использовать любые три буквы, используйте

'http(s)?://(\\w{3}.)?smh.com.au/$'

Может быть, вам нужно больше, чем 0 любых букв?

'http(s)?://(\\w+.)?smh.com.au/$'

Думаю, вам поможет этот ответ: Как представить фиксированное количество повторов в регулярном выражении?

person Charlie    schedule 15.08.2016