• 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 |