• trevor@lemmy.mlOP
    link
    fedilink
    arrow-up
    9
    ·
    3 days ago

    Here is an example. Given the following list of strings:

    1.2.3.4
    127.0.0.1
    127.0.0.2
    127.0.0.11
    128.0.0.1
    125.0.0.*
    200.0.0.1
    2001:0db8:85a3:0000:0000:8a2e:0370:1300
    2001:0db8:85a3:0000:0000:8a2e:0370:1330
    2001:0db8:85a3:0000:0000:8a2e:0370:1337
    あいうえお
    あいうえこ
    😃😁😆😐
    😃😁😆
    😃😁🤣
    

    list2regexp will return the following pattern:

    ^(?:1(?:(?:\.(?:2(?:\.(?:3(?:\.(?:4))))))|(?:2(?:(?:5(?:\.(?:0(?:\.(?:0(?:\.(?:.*)))))))|(?:7(?:\.(?:0(?:\.(?:0(?:\.(?:(?:1(?:|(?:1)))|(?:2))))))))|(?:8(?:\.(?:0(?:\.(?:0(?:\.(?:1)))))))))))|(?:2(?:0(?:0(?:(?:\.(?:0(?:\.(?:0(?:\.(?:1))))))|(?:1(?::(?:0(?:d(?:b(?:8(?::(?:8(?:5(?:a(?:3(?::(?:0(?:0(?:0(?:0(?::(?:0(?:0(?:0(?:0(?::(?:8(?:a(?:2(?:e(?::(?:0(?:3(?:7(?:0(?::(?:1(?:3(?:(?:0(?:0))|(?:3(?:(?:0|7))))))))))))))))))))))))))))))))))))))))))|(?:あ(?:い(?:う(?:え(?:(?:お|こ))))))|(?:😃(?:😁(?:(?:😆(?:|(?:😐)))|(?:🤣))))$
    
    • leanleft@lemmy.ml
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      1 day ago

      it should(could) have newlines for readability. and is genererally an underappreciated feature that leads to people thinking that regex is crazy and unreadable.

      • trevor@lemmy.mlOP
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        1 day ago

        I didn’t know about this so I tried testing it out. Yes, this is possible, but requires enabling a specific flag (x when it comes to regexp2) assuming the engine even supports this feature.

        • leanleft@lemmy.ml
          link
          fedilink
          English
          arrow-up
          2
          ·
          edit-2
          1 day ago

          also comments. which can be very simple…like metadata about boundary,membership,grouping, or hierarchy.
          its supported in most languages except javascript and plain grep.
          but it doesnt serve a programmatic use… so even if its a hella useful single char or digit, that massively boosts readability… some people would argue that it’s extra/junk

        • apparia@discuss.tchncs.de
          link
          fedilink
          English
          arrow-up
          8
          arrow-down
          1
          ·
          2 days ago

          Holy overengineering, Batman. IP addresses of all things are trivially parseable into fixed-length byte sequences. Just do that and use a search tree. Or, IDK; this is an extremely solved problem, there are probably even better solutions out there – but I promise you text regex is involved in none of the good ones.

          Even for actual string matching, any decent regex engine will compile and optimise an alternation a|b|c|... better than this text wrangling will. Unless you have actual benchmarks showing this gives you an advantage with the engine you’re using, you’re just introducing complexity for no gain.

        • Helix 🧬@feddit.org
          link
          fedilink
          arrow-up
          3
          arrow-down
          1
          ·
          2 days ago

          It’s called “allowlist” and “denylist” nowadays as it’s easier to understand for non-native speakers and not racist.

          I feel like there’s an easier and faster way to match IP addresses than regex, e.g. the search tree apparia suggested. At least use bytes to match 😄

            • Helix 🧬@feddit.org
              link
              fedilink
              English
              arrow-up
              1
              arrow-down
              1
              ·
              1 day ago

              Yes, but does it really hurt you to make your software more accessible?

              What good arguments do you have for the term blacklist?

              “Denylist” is easier to understand and doesn’t spark discussions. Nobody will be offended, whether it’s technically correct to be offended or not.

              I’m not a person of colour but your answer still insults me, because it’s so tone deaf.

    • Courant d'air 🍃@jlai.lu
      link
      fedilink
      arrow-up
      5
      arrow-down
      2
      ·
      3 days ago

      I think the list of strings with pipes between each element would be shorter than this huge unreadable blob

      • trevor@lemmy.mlOP
        link
        fedilink
        arrow-up
        4
        ·
        2 days ago

        Being pretty or short is not a goal of this project, nor do I see the value in such goals.

        • Helix 🧬@feddit.org
          link
          fedilink
          English
          arrow-up
          2
          ·
          2 days ago

          Pretty and short probably also have better performance.

          Did you manually come up with a prettier regex to compare against?