til/Knowledge/regex.md

56 lines
1.7 KiB
Markdown

# Regular expression
Read [Syntax](https://github.com/google/re2/wiki/Syntax).
Read [Golang-Regex-Tutorial](https://github.com/StefanSchroeder/Golang-Regex-Tutorial).
Play with [Regex101](https://regex101.com/).
## Basic
| regex | meaning |
| ------------ | ----------------------------------------- |
| `.` | any character, default not including `\n` |
| `[xy]` | `x` or `y` character |
| `[^xy]` | not `x` and `y` character |
| `x`\|`y` | `x` or `y` |
| `x*` | 0 or more `x`, prefer **more** |
| `x+` | 1 or more `x`, prefer **more** |
| `x?` | 0 or 1 `x` , prefer 1 |
| `x*?` | 0 or more `x`, prefer **fewer** |
| `x+?` | 1 or more `x`, prefer **fewer** |
| `^` | at beginning of text |
| `$` | at end of text |
| `\d` | digits |
| `\D` | not digits |
| `\s` | whitespace |
| `\S` | not whitespace |
| `(foo)` | numbered capturing group (submatch) |
| `(?:foo)` | non capturing group |
| `(?:x`\|`y)` | `x` or `y` expression wrap in `()` |
| `(?flags)` | set flags within current group |
| flag | meaning |
| ---- | ---------------- |
| `i` | case-insensitive |
| `s` | `.` match `\n` |
## Example
```regex
(?i)hello\sfoo
match: Hello Foo
match: heLLo fOO
```
```regex
hello\s(.+)
match: hello foo
group 1: foo
match: hello bar
group 1: bar
```