Haga coincidir las URL de Stack Exchange


15

Prólogo

Después de instalar una extensión de navegador anti-XSS, Stack Snippets dejó de funcionar repentinamente en toda la red de Stack Exchange. ¡Ya no podía aprender de Stack Overflow , ver demostraciones de trabajo sobre la experiencia del usuario y, lo peor de todo, no podía probar las respuestas de JavaScript en Programming Puzzles y Code Golf ! Desesperadamente busqué un remedio y encontré un pequeño cuadro de entrada en la configuración, en el que podía colocar una sola expresión regular. No cabía en todos los sitios de Stack Exchange en este pequeño cuadro, así que pedí ayuda. Esta es esa pregunta.

Tarea

Su tarea es crear una expresión regular que coincida con todas las URL del sitio web de Stack Exchange, sin que coincida ningún dominio que no sea propiedad de Stack Overflow Inc ..

Su expresión regular debe coincidir con todas las URL con las siguientes partes:

  • protocol: esto será http://o https://.
  • domain: este será un elemento de esta lista:

    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: esta será la cadena vacía /o /seguida de cualquier cadena

La url será la cadena creada al agregar protocol, domainy pageentre sí, en ese orden.

Casos de prueba

Su expresión regular debe coincidir con:

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

Su expresión regular no debe coincidir con:

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/

Su expresión regular puede coincidir con:

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

porque son propiedad de Stack Exchange Inc. y, por lo tanto, no serán vulnerables a los ataques XSS.

Este es un desafío de , por lo que gana la expresión regular más corta.


¿Qué quieres decir con "puede coincidir"? ¿No deberían estar también en 'must match'? Por lo general, no tomamos amablemente los 'objetivos de bonificación' aquí, ya que en un contexto de golf de código, prácticamente siempre se omitirán para guardar bytes.
orlp

@orlp Veo esto más como desafíos de arte ASCII que dicen: "Su programa puede generar cualquier cantidad de espacios en blanco finales siempre que el resultado se vea como el ejemplo". En otras palabras, estos son algunos casos que el programador no tiene que preocuparse por rechazar explícitamente. Si fallan, bien; si coinciden, bien.
DLosc

44
@orlp Los agregué porque, para la mayoría de las técnicas de implementación, guardan bytes.
wizzwizz4

Respuestas:


16

337 336 333 327 bytes

^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)(/.*)?$

No utiliza ninguna característica elegante de expresiones regulares, por lo que debería funcionar en cualquier sabor de expresión regular.


@TimmyD Cuando lo probé, también coincidía con uno de los opcionales ... regexr
wizzwizz4

@ wizzwizz4 Olvidé el intercambio de pila y los marcadores de inicio / fin.
orlp

@oflp Ahora no coincide con nada ... ¿Quizás los marcadores de inicio / finalización no funcionan en regexr? regexr
wizzwizz4

@ wizzwizz4 No tengo idea, nunca uso regexr. Intente ingresar una cadena a la vez en lugar de un texto completo.
orlp

1
Puede puede ahorrar unos pocos bytes mediante la combinación seasonedadvicecon el brewadvicelugar de con las otras spalabras.
Riley

5

359 348 bytes

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))(\/.*)?$

Probarlo en RegExr


3

2179 2092 1966 bytes

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))(\/|$)

Coincide exactamente con los dominios enumerados y nada más. Hice la mayor parte de la compresión a mano. Estoy un poco avergonzado de haber pasado tanto tiempo en ello.


¿Hay más .comcompresión que puedas hacer?
wizzwizz4

@ wizzwizz4 Estoy seguro de que podría comprimir mucho más. Podría volver a esto más tarde.
Riley

1
Todos los subdominios se consideran seguros, por lo que no necesita enumerar ninguno de ellos.
curiousdannii

@curiousdannii Lo sé, pero quería ver qué tan pequeño podría hacerlo y solo coincidir con los subdominios dados.
Riley

2

142 140 334 bytes

#^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)(/|$)#
  • coincide con todo en los dominios de segundo nivel especificados, ruta o sin ruta
  • utiliza #como delimitador para/ no necesita escapar (se guardaron dos bytes)
  • comprimido manualmente
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.