Сопоставьте URL-адреса Stack Exchange


15

пролог

После установки расширения браузера анти-XSS фрагменты Stack неожиданно перестали работать по всей сети Stack Exchange. Я больше не мог учиться у Stack Overflow , видеть рабочие демонстрации по пользовательскому опыту и, что хуже всего, не мог проверить ответы на JavaScript по программированию головоломок и Code Golf ! Я отчаянно искал лекарство и нашел в настройках небольшое поле ввода, в котором можно было бы разместить одно регулярное выражение. Я не смог вместить все сайты Stack Exchange в эту маленькую коробочку, поэтому попросил помощи. Это тот вопрос.

задача

Ваша задача - создать регулярное выражение, соответствующее всем URL-адресам веб-сайтов Stack Exchange, без сопоставления доменов, не принадлежащих Stack Overflow Inc.

Ваше регулярное выражение должно соответствовать всем URL-адресам со следующими частями:

  • protocol: Это будет либо http://или https://.
  • domain: это будет предмет из этого списка:

    stackoverflow.com
    www.stackoverflow.com
    facebook.stackoverflow.com
    serverfault.com
    superuser.com
    meta.stackexchange.com
    webapps.stackexchange.com
    nothingtoinstall.com
    meta.webapps.stackexchange.com
    meta.nothingtoinstall.com
    gaming.stackexchange.com
    arqade.com
    thearqade.com
    meta.gaming.stackexchange.com
    meta.arqade.com
    meta.thearqade.com
    webmasters.stackexchange.com
    webmaster.stackexchange.com
    meta.webmasters.stackexchange.com
    meta.webmaster.stackexchange.com
    cooking.stackexchange.com
    seasonedadvice.com
    meta.cooking.stackexchange.com
    meta.seasonedadvice.com
    gamedev.stackexchange.com
    meta.gamedev.stackexchange.com
    photo.stackexchange.com
    photography.stackexchange.com
    photos.stackexchange.com
    meta.photo.stackexchange.com
    meta.photography.stackexchange.com
    meta.photos.stackexchange.com
    stats.stackexchange.com
    statistics.stackexchange.com
    crossvalidated.com
    meta.stats.stackexchange.com
    meta.statistics.stackexchange.com
    math.stackexchange.com
    maths.stackexchange.com
    mathematics.stackexchange.com
    meta.math.stackexchange.com
    diy.stackexchange.com
    meta.diy.stackexchange.com
    meta.superuser.com
    meta.serverfault.com
    gis.stackexchange.com
    meta.gis.stackexchange.com
    tex.stackexchange.com
    meta.tex.stackexchange.com
    askubuntu.com
    ubuntu.stackexchange.com
    meta.askubuntu.com
    meta.ubuntu.stackexchange.com
    money.stackexchange.com
    basicallymoney.com
    www.basicallymoney.com
    meta.money.stackexchange.com
    english.stackexchange.com
    elu.stackexchange.com
    meta.english.stackexchange.com
    stackapps.com
    ux.stackexchange.com
    ui.stackexchange.com
    meta.ux.stackexchange.com
    meta.ui.stackexchange.com
    unix.stackexchange.com
    linux.stackexchange.com
    meta.unix.stackexchange.com
    meta.linux.stackexchange.com
    wordpress.stackexchange.com
    meta.wordpress.stackexchange.com
    cstheory.stackexchange.com
    meta.cstheory.stackexchange.com
    apple.stackexchange.com
    askdifferent.com
    meta.apple.stackexchange.com
    rpg.stackexchange.com
    meta.rpg.stackexchange.com
    bicycles.stackexchange.com
    bicycle.stackexchange.com
    cycling.stackexchange.com
    bikes.stackexchange.com
    meta.bicycles.stackexchange.com
    meta.bicycle.stackexchange.com
    programmers.stackexchange.com
    programmer.stackexchange.com
    meta.programmers.stackexchange.com
    electronics.stackexchange.com
    chiphacker.com
    www.chiphacker.com
    meta.electronics.stackexchange.com
    android.stackexchange.com
    meta.android.stackexchange.com
    boardgames.stackexchange.com
    boardgame.stackexchange.com
    meta.boardgames.stackexchange.com
    physics.stackexchange.com
    meta.physics.stackexchange.com
    homebrew.stackexchange.com
    homebrewing.stackexchange.com
    brewadvice.com
    meta.homebrew.stackexchange.com
    meta.homebrewing.stackexchange.com
    security.stackexchange.com
    itsecurity.stackexchange.com
    meta.security.stackexchange.com
    meta.itsecurity.stackexchange.com
    writers.stackexchange.com
    writer.stackexchange.com
    writing.stackexchange.com
    meta.writers.stackexchange.com
    video.stackexchange.com
    avp.stackexchange.com
    meta.video.stackexchange.com
    meta.avp.stackexchange.com
    graphicdesign.stackexchange.com
    graphicsdesign.stackexchange.com
    graphicdesigns.stackexchange.com
    meta.graphicdesign.stackexchange.com
    dba.stackexchange.com
    meta.dba.stackexchange.com
    scifi.stackexchange.com
    sciencefiction.stackexchange.com
    fantasy.stackexchange.com
    meta.scifi.stackexchange.com
    codereview.stackexchange.com
    meta.codereview.stackexchange.com
    codegolf.stackexchange.com
    meta.codegolf.stackexchange.com
    quant.stackexchange.com
    meta.quant.stackexchange.com
    pm.stackexchange.com
    meta.pm.stackexchange.com
    skeptics.stackexchange.com
    skeptic.stackexchange.com
    skepticexchange.com
    meta.skeptics.stackexchange.com
    fitness.stackexchange.com
    meta.fitness.stackexchange.com
    drupal.stackexchange.com
    meta.drupal.stackexchange.com
    mechanics.stackexchange.com
    garage.stackexchange.com
    meta.mechanics.stackexchange.com
    meta.garage.stackexchange.com
    parenting.stackexchange.com
    meta.parenting.stackexchange.com
    sharepoint.stackexchange.com
    sharepointoverflow.com
    www.sharepointoverflow.com
    meta.sharepoint.stackexchange.com
    music.stackexchange.com
    guitars.stackexchange.com
    guitar.stackexchange.com
    meta.music.stackexchange.com
    sqa.stackexchange.com
    meta.sqa.stackexchange.com
    judaism.stackexchange.com
    mi.yodeya.com
    yodeya.com
    yodeya.stackexchange.com
    miyodeya.com
    meta.judaism.stackexchange.com
    german.stackexchange.com
    deutsch.stackexchange.com
    meta.german.stackexchange.com
    japanese.stackexchange.com
    meta.japanese.stackexchange.com
    philosophy.stackexchange.com
    meta.philosophy.stackexchange.com
    gardening.stackexchange.com
    landscaping.stackexchange.com
    meta.gardening.stackexchange.com
    travel.stackexchange.com
    meta.travel.stackexchange.com
    productivity.stackexchange.com
    meta.productivity.stackexchange.com
    crypto.stackexchange.com
    cryptography.stackexchange.com
    meta.crypto.stackexchange.com
    meta.cryptography.stackexchange.com
    dsp.stackexchange.com
    signals.stackexchange.com
    meta.dsp.stackexchange.com
    french.stackexchange.com
    meta.french.stackexchange.com
    christianity.stackexchange.com
    meta.christianity.stackexchange.com
    bitcoin.stackexchange.com
    meta.bitcoin.stackexchange.com
    linguistics.stackexchange.com
    linguist.stackexchange.com
    meta.linguistics.stackexchange.com
    hermeneutics.stackexchange.com
    meta.hermeneutics.stackexchange.com
    history.stackexchange.com
    meta.history.stackexchange.com
    bricks.stackexchange.com
    meta.bricks.stackexchange.com
    spanish.stackexchange.com
    espanol.stackexchange.com
    meta.spanish.stackexchange.com
    scicomp.stackexchange.com
    meta.scicomp.stackexchange.com
    movies.stackexchange.com
    meta.movies.stackexchange.com
    chinese.stackexchange.com
    meta.chinese.stackexchange.com
    biology.stackexchange.com
    meta.biology.stackexchange.com
    poker.stackexchange.com
    meta.poker.stackexchange.com
    mathematica.stackexchange.com
    meta.mathematica.stackexchange.com
    cogsci.stackexchange.com
    meta.cogsci.stackexchange.com
    outdoors.stackexchange.com
    meta.outdoors.stackexchange.com
    martialarts.stackexchange.com
    meta.martialarts.stackexchange.com
    sports.stackexchange.com
    meta.sports.stackexchange.com
    academia.stackexchange.com
    academics.stackexchange.com
    meta.academia.stackexchange.com
    cs.stackexchange.com
    computerscience.stackexchange.com
    meta.cs.stackexchange.com
    workplace.stackexchange.com
    meta.workplace.stackexchange.com
    windowsphone.stackexchange.com
    meta.windowsphone.stackexchange.com
    chemistry.stackexchange.com
    meta.chemistry.stackexchange.com
    chess.stackexchange.com
    meta.chess.stackexchange.com
    raspberrypi.stackexchange.com
    meta.raspberrypi.stackexchange.com
    russian.stackexchange.com
    meta.russian.stackexchange.com
    islam.stackexchange.com
    meta.islam.stackexchange.com
    salesforce.stackexchange.com
    meta.salesforce.stackexchange.com
    patents.stackexchange.com
    askpatents.com
    askpatents.stackexchange.com
    meta.patents.stackexchange.com
    meta.askpatents.com
    meta.askpatents.stackexchange.com
    genealogy.stackexchange.com
    meta.genealogy.stackexchange.com
    robotics.stackexchange.com
    meta.robotics.stackexchange.com
    expressionengine.stackexchange.com
    meta.expressionengine.stackexchange.com
    politics.stackexchange.com
    meta.politics.stackexchange.com
    anime.stackexchange.com
    meta.anime.stackexchange.com
    magento.stackexchange.com
    meta.magento.stackexchange.com
    ell.stackexchange.com
    meta.ell.stackexchange.com
    sustainability.stackexchange.com
    meta.sustainability.stackexchange.com
    tridion.stackexchange.com
    meta.tridion.stackexchange.com
    reverseengineering.stackexchange.com
    meta.reverseengineering.stackexchange.com
    networkengineering.stackexchange.com
    meta.networkengineering.stackexchange.com
    opendata.stackexchange.com
    meta.opendata.stackexchange.com
    freelancing.stackexchange.com
    meta.freelancing.stackexchange.com
    blender.stackexchange.com
    meta.blender.stackexchange.com
    mathoverflow.net
    mathoverflow.stackexchange.com
    mathoverflow.com
    meta.mathoverflow.net
    space.stackexchange.com
    thefinalfrontier.stackexchange.com
    meta.space.stackexchange.com
    sound.stackexchange.com
    socialsounddesign.com
    sounddesign.stackexchange.com
    meta.sound.stackexchange.com
    astronomy.stackexchange.com
    meta.astronomy.stackexchange.com
    tor.stackexchange.com
    meta.tor.stackexchange.com
    pets.stackexchange.com
    meta.pets.stackexchange.com
    ham.stackexchange.com
    meta.ham.stackexchange.com
    italian.stackexchange.com
    meta.italian.stackexchange.com
    pt.stackoverflow.com
    br.stackoverflow.com
    stackoverflow.com.br
    meta.pt.stackoverflow.com
    meta.br.stackoverflow.com
    aviation.stackexchange.com
    meta.aviation.stackexchange.com
    ebooks.stackexchange.com
    meta.ebooks.stackexchange.com
    alcohol.stackexchange.com
    beer.stackexchange.com
    dranks.stackexchange.com
    meta.alcohol.stackexchange.com
    meta.beer.stackexchange.com
    softwarerecs.stackexchange.com
    meta.softwarerecs.stackexchange.com
    arduino.stackexchange.com
    meta.arduino.stackexchange.com
    cs50.stackexchange.com
    meta.cs50.stackexchange.com
    expatriates.stackexchange.com
    expats.stackexchange.com
    meta.expatriates.stackexchange.com
    matheducators.stackexchange.com
    meta.matheducators.stackexchange.com
    meta.stackoverflow.com
    earthscience.stackexchange.com
    meta.earthscience.stackexchange.com
    joomla.stackexchange.com
    meta.joomla.stackexchange.com
    datascience.stackexchange.com
    meta.datascience.stackexchange.com
    puzzling.stackexchange.com
    meta.puzzling.stackexchange.com
    craftcms.stackexchange.com
    meta.craftcms.stackexchange.com
    buddhism.stackexchange.com
    meta.buddhism.stackexchange.com
    hinduism.stackexchange.com
    meta.hinduism.stackexchange.com
    communitybuilding.stackexchange.com
    moderator.stackexchange.com
    moderators.stackexchange.com
    meta.communitybuilding.stackexchange.com
    meta.moderators.stackexchange.com
    startups.stackexchange.com
    meta.startups.stackexchange.com
    worldbuilding.stackexchange.com
    meta.worldbuilding.stackexchange.com
    ja.stackoverflow.com
    jp.stackoverflow.com
    meta.ja.stackoverflow.com
    emacs.stackexchange.com
    meta.emacs.stackexchange.com
    hsm.stackexchange.com
    meta.hsm.stackexchange.com
    economics.stackexchange.com
    meta.economics.stackexchange.com
    lifehacks.stackexchange.com
    meta.lifehacks.stackexchange.com
    engineering.stackexchange.com
    meta.engineering.stackexchange.com
    coffee.stackexchange.com
    meta.coffee.stackexchange.com
    vi.stackexchange.com
    vim.stackexchange.com
    meta.vi.stackexchange.com
    musicfans.stackexchange.com
    meta.musicfans.stackexchange.com
    woodworking.stackexchange.com
    meta.woodworking.stackexchange.com
    civicrm.stackexchange.com
    meta.civicrm.stackexchange.com
    health.stackexchange.com
    meta.health.stackexchange.com
    ru.stackoverflow.com
    hashcode.ru
    stackoverflow.ru
    meta.ru.stackoverflow.com
    meta.hashcode.ru
    rus.stackexchange.com
    russ.hashcode.ru
    russ.stackexchange.com
    meta.rus.stackexchange.com
    mythology.stackexchange.com
    meta.mythology.stackexchange.com
    law.stackexchange.com
    meta.law.stackexchange.com
    opensource.stackexchange.com
    meta.opensource.stackexchange.com
    elementaryos.stackexchange.com
    meta.elementaryos.stackexchange.com
    portuguese.stackexchange.com
    meta.portuguese.stackexchange.com
    computergraphics.stackexchange.com
    meta.computergraphics.stackexchange.com
    hardwarerecs.stackexchange.com
    meta.hardwarerecs.stackexchange.com
    es.stackoverflow.com
    meta.es.stackoverflow.com
    3dprinting.stackexchange.com
    threedprinting.stackexchange.com
    meta.3dprinting.stackexchange.com
    ethereum.stackexchange.com
    meta.ethereum.stackexchange.com
    latin.stackexchange.com
    meta.latin.stackexchange.com
    languagelearning.stackexchange.com
    meta.languagelearning.stackexchange.com
    retrocomputing.stackexchange.com
    meta.retrocomputing.stackexchange.com
    crafts.stackexchange.com
    meta.crafts.stackexchange.com
    korean.stackexchange.com
    meta.korean.stackexchange.com
    monero.stackexchange.com
    meta.monero.stackexchange.com
    ai.stackexchange.com
    meta.ai.stackexchange.com
    esperanto.stackexchange.com
    meta.esperanto.stackexchange.com
    sitecore.stackexchange.com
    meta.sitecore.stackexchange.com
    
  • page: это будет либо пустая строка, /либо /следующая строка

URL будет строкой, созданной добавлением protocol, domainи pageдруг к другу, в этом порядке.

Testcases

Ваше регулярное выражение должно соответствовать:

/codegolf//
http://retrocomputing.stackexchange.com
https://facebook.stackoverflow.com/questions/1234
http://meta.nothingtoinstall.com/thisisa404.php?file=command.com

Ваше регулярное выражение не должно совпадать:

http//codegolf.stackexchange.com/
https://meta.stackoverflow.com.fakesite.dodgy/cgi-bin/virus.cgi?vector=apt
file://www.stackoverflow.com/
http://ripoff.com/stackoverflow.com/q/1234/

Ваше регулярное выражение может соответствовать:

http://panda.stackexchange.com/
https://www.meta.codegolf.stackexchange.com
http://alpha.beta.charlie.delta.chiphacker.com
https://stackexchange.com/sites/

потому что они принадлежат Stack Exchange Inc. и поэтому не будут уязвимы для атак XSS.

Это соревнование по , поэтому победит самое короткое регулярное выражение!


Что вы имеете в виду «может соответствовать»? Разве они не должны быть в «должны совпадать»? Мы, как правило, не любезно относимся к «бонусным целям», так как в контексте гольф-кода они практически всегда пропускаются для экономии байтов.
orlp

@orlp Я считаю, что это больше похоже на вызовы ASCII-art, которые говорят: «Ваша программа может выводить любое количество пробелов, если результат выглядит как пример». Другими словами, в некоторых случаях программисту не нужно беспокоиться о явном запрете. Если они терпят неудачу, хорошо; если они совпадают, хорошо.
DLosc

4
@orlp Я добавил их, потому что для большинства методов реализации они сохраняют байты.
wizzwizz4

Ответы:


16

337 336 333 327 байт

^https?://([^/]+\.)*(stackoverflow\.(com(\.br)?|ru)|mathoverflow\.(com|net)|hashcode\.ru|((the)?arqade|chiphacker|(mi)?yodeya|ask(ubuntu|different|patents)|(seasoned|brew)advice|s(erverfault|(tack|keptic)exchange|uperuser|tackapps|harepointoverflow|ocialsounddesign)|nothingtoinstall|crossvalidated|basicallymoney)\.com)(/.*)?$

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


@TimmyD Когда я попробовал его, он тоже совпадал с одним из опциональных ... regexr
wizzwizz4

@ wizzwizz4 Я забыл маркеры stackexchange и start / end.
orlp

@oflp Это не соответствует ничего сейчас ... Может быть , начала / конца маркеры не работают в RegExr? regexr
wizzwizz4

@ wizzwizz4 Понятия не имею, я никогда не использую регулярное выражение. Попробуйте вводить одну строку за раз, а не полный текст.
orlp

1
Вы можете можете сохранить несколько байтов, комбинируя seasonedadviceс brewadviceвместо с другими sсловами.
Райли

5

359 348 байт

https?:\/\/(([^/]+\.)*((stack(overflow|apps|exchange)|ask(ubuntu|different|patents)|(the)?arqade|serverfault|superuser|nothingtoinstall|(seasoned|brew)advice|crossvalidated|basicallymoney|chiphacker|skepticexchange|(sharepoint|math)overflow|(mi)?yodea|socialsounddesign)\.com)|(stackoverflow(\.com\.br|\.ru)|hashcode\.ru|mathoverflow\.net))(\/.*)?$

Проверьте это на регулярном выражении


3

2179 2092 1966 байт

https?:\/\/((((www|facebook|jp|(meta\.?)?(es|ru|ja|pt|br)?)\.)?stackoverflow\.com)|(stackoverflow\.(ru|com\.br))|(((russ|meta)\.)?hashcode\.ru)|(crossvalidated|socialsounddesign|mathoverflow|(mi\.?)?yodeya|(www\.)?(sharepointoverflow|basicallymoney)|skepticexchange|brewadvice|(www\.)?chiphacker|ask(different|ubuntu)|stackapps|(meta\.)?(nothingtoinstall|arqade|thearqade|seasonedadvice|superuser|serverfault|ask(ubuntu|patents)))\.com|((meta\.)?mathoverflow\.net)|(((meta\.)?((3|three)dprinting|(ask)?patents|(community|world)building|(econo|acade)mics|(it)?security|(reverse|network)?engineering|a(cademia|i|lcohol|ndroid|nime|pple|rduino|stronomy|viation|vp)|b((e|lend)er|i(cycles?|kes|ology|tcoin)|oardgames?|ricks|uddhism)|c(h(emistry|ess|inese|ristianity)|ivicrm|o(de(review|golf)|ffee|gsci|mputer(science|graphics)|oking)|r(aftcms|afts|ypto(graphy)?)|s(50)?|stheory)|d(ba|eutsch|iy|ranks|rupal|sp)|(earth|data)science|e(books|l(ectronics|ementaryos|l|u)|macs|nglish|spanol|speranto|thereum|xp(at(s|riates)|ressionengine))|f(antasy|itness|re(elancing|nch))|g(a(medev|ming|rage|rdening)|erman|enealogy|is|raphics?designs?|uitars?)|h(am|ealth|ermeneutics|induism|istory|omebrew(ing)?|sm)|(hard|soft)warerecs|islam|italian|j(apanese|oomla|udaism)|korean|l(a((ndscap|nguagelearn)ing|tin|w)|i(fehacks|nguist(ics)?|nux|))|m(a(gento|rtialarts|th(educators|ematica|ematics|s|overflow)?)|eta|echanics|o(derators?|nero|ney|vies)|usic(fans)?|ythology)|o(pen(data|source)|utdoors)|(cycl|parent|retrocomput)ing|p(ets|h(ilosophy|oto(graphy|s)?|ysics)|m|o(ker|litics|rtuguese)|roductivity|rogrammers?|uzzling)|quant|r(aspberrypi|obotics|pg|us(s|sian)?)|s(alesforce|ci(comp|encefiction|fi)|harepoint|ignals|itecore|keptics?|ound(design)?|p(ace|anish|orts)|qa|tartups|tat(s|istics)|ustainability)|t(ex|hefinalfrontier|or|ravel|ridion)|u(buntu|i|nix|x)|vi(deo|m)?|w(eb(apps|masters?)|indowsphone|o(odworking|rdpress|rkplace)|rit(ers?|ing))|(yodeya)))\.stackexchange\.com))(\/|$)

Совпадает точно с указанными доменами и ничем иным. Я сделал большую часть сжатия вручную. Я немного смущен тем, что потратил столько времени на это.


Есть ли еще .comкомпрессия, которую вы можете сделать?
wizzwizz4

@ wizzwizz4 Я уверен, что смог бы сжать намного больше. Я мог бы вернуться к этому позже.
Райли

1
Все субдомены считаются безопасными, поэтому вам не нужно указывать ни один из них.
curiousdannii

@curiousdannii Я знаю, но я хотел посмотреть, насколько маленький я смог сделать это и соответствовать только заданным поддоменам.
Райли

2

142 140 334 байта

#^https?:\/\/([^\/]*\.)?(hashcode\.ru|mathoverflow\.(com|net)|stackoverflow\.(ru|com(\.br)?)|((stack|skeptic)exchange|stackapps|ask(different|patents|ubuntu)|(brew|seasoned)advice|(the)?arqade|basicallymoney|chiphacker|crossvalidated|nothingtoinstall|serverfault|sharepointoverflow|socialsounddesign|superuser|(mi)?yodeya)\.com)(/|$)#
  • соответствует всему на указанных доменах второго уровня, пути или пути нет
  • использует в #качестве разделителя, поэтому не /нуждается в экранировании (сохранено два байта)
  • сжатый вручную
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.