• SatyrSack@lemmy.sdf.org
      link
      fedilink
      arrow-up
      13
      ·
      4 days ago

      How so? I have been getting much more comfortable with it lately, but I am curious what downsides there are

      • Midnitte@beehaw.org
        link
        fedilink
        English
        arrow-up
        18
        arrow-down
        1
        ·
        4 days ago

        The downsides are having to relearn it every time you need to understand it.

        • SatyrSack@lemmy.sdf.org
          link
          fedilink
          arrow-up
          23
          ·
          edit-2
          4 days ago

          Here is my cheatsheet that has been very helpful. Obviously, this will not teach you how RegEx works, but is a good quick reference when I forget the exact syntax for something.

          RegExp

          Character classes

          Pattern Description
          . Any character, except newline
          \w Word
          \d Digit
          \s Whitespace
          \W Not word
          \D Not digit
          \S Not whitespace
          [abc] Any of a, b, or c
          [a-e] Characters between a and e
          [1-9] Digit between 1 and 9
          [[:print:]] Any printable character including spaces
          [^abc] Any character except a, b or c

          Anchors

          Pattern Description
          \G Start of match
          ^ Start of string *
          $ End of string *
          \A Start of string
          \Z End of string
          \z Absolute end of string
          \b A word boundary
          \B Non-word boundary
          ^abc Start with abc
          abc$ End with abc

          For multiline patterns (m flag), ^ and $ will act as start and end of line.

          Escaped characters

          Pattern Description
          \. \* \\ Escape special character used by regex
          \t Tab
          \n Newline
          \r Carriage return

          Groups

          Pattern Description
          (abc) Capture group
          (a|b) Match a or b
          (?:abc) Match abc, but don’t capture
          \1 Substituted with text matched of the 1st capturing group

          Quantifiers

          Pattern Description
          a* Match 0 or more
          a+ Match 1 or more
          a? Match 0 or 1
          a{5} Match exactly 5
          a{,3} Match up to 3
          a{3,} Match 3 or more
          a{1,3} Match between 1 and 3

          Lookahead & Lookbehind

          Pattern Description
          a(?=b) Match a in baby but not in bay
          a(?!b) Match a in Stan but not in Stab
          (?<=a)b Match b in crabs but not in cribs
          (?<!a)b Match b in fib but not in fab
          (?<![a-z])abc(?![a-z]) Match abc without any letters before/after
          Raw Markdown
          # RegExp
          
          ## Character classes
          
          | Pattern       | Description                              |
          | ------------- | ---------------------------------------- |
          | `.`           | Any character, except newline            |
          | `\w`          | Word                                     |
          | `\d`          | Digit                                    |
          | `\s`          | Whitespace                               |
          | `\W`          | Not word                                 |
          | `\D`          | Not digit                                |
          | `\S`          | Not whitespace                           |
          | `[abc]`       | Any of a, b, or c                        |
          | `[a-e]`       | Characters between `a` and `e`           |
          | `[1-9]`       | Digit between `1` and `9`                |
          | `[[:print:]]` | Any printable character including spaces |
          | `[^abc]`      | Any character except `a`, `b` or `c`     |
          
          ## Anchors
          
          | Pattern | Description            |
          | ------- | ---------------------- |
          | `\G`    | Start of match         |
          | `^`     | Start of string \*     |
          | `$`     | End of string \*       |
          | `\A`    | Start of string        |
          | `\Z`    | End of string          |
          | `\z`    | Absolute end of string |
          | `\b`    | A word boundary        |
          | `\B`    | Non-word boundary      |
          | `^abc`  | Start with `abc`       |
          | `abc$`  | End with `abc`         |
          
          For multiline patterns (`m` flag), `^` and `$` will act as start and end of line.
          
          ## Escaped characters
          
          | Pattern    | Description                            |
          | ---------- | -------------------------------------- |
          | `\. \* \\` | Escape special character used by regex |
          | `\t`       | Tab                                    |
          | `\n`       | Newline                                |
          | `\r`       | Carriage return                        |
          
          ## Groups
          
          | Pattern   | Description                                              |
          | --------- | -------------------------------------------------------- |
          | `(abc)`   | Capture group                                            |
          | `(a\|b)`  | Match `a` or `b`                                         |
          | `(?:abc)` | Match `abc`, but don't capture                           |
          | `\1`      | Substituted with text matched of the 1st capturing group |
          
          
          ## Quantifiers
          
          | Pattern  | Description           |
          | -------- | --------------------- |
          | `a*`     | Match 0 or more       |
          | `a+`     | Match 1 or more       |
          | `a?`     | Match 0 or 1          |
          | `a{5}`   | Match exactly 5       |
          | `a{,3}`  | Match up to 3         |
          | `a{3,}`  | Match 3 or more       |
          | `a{1,3}` | Match between 1 and 3 |
          
          ## Lookahead & Lookbehind
          
          | Pattern                  | Description                                  |
          | ---                      | ---                                          |
          | `a(?=b)`                 | Match `a` in `baby` but not in `bay`         |
          | `a(?!b)`                 | Match `a` in `Stan` but not in `Stab`        |
          | `(?<=a)b`                | Match `b` in `crabs` but not in `cribs`      |
          | `(?<!a)b`                | Match `b` in `fib` but not in `fab`          |
          | `(?<![a-z])abc(?![a-z])` | Match `abc` without any letters before/after |