182 lines
5.4 KiB
Markdown
182 lines
5.4 KiB
Markdown
The {{< product-name >}} SQL implementation uses the
|
|
[PCRE-like](https://en.wikibooks.org/wiki/Regular_Expressions/Perl-Compatible_Regular_Expressions)
|
|
regular expression [syntax](https://docs.rs/regex/latest/regex/#syntax)
|
|
(excluding some features such as look-around and back-references) and supports
|
|
the following regular expression functions:
|
|
|
|
- [regexp_count](#regexp_count)
|
|
- [regexp_like](#regexp_like)
|
|
- [regexp_match](#regexp_match)
|
|
- [regexp_replace](#regexp_replace)
|
|
|
|
## regexp_count
|
|
|
|
Returns the number of matches that a regular expression has in a string.
|
|
|
|
```sql
|
|
regexp_count(str, regexp[, start, flags])
|
|
```
|
|
|
|
##### Arguments
|
|
|
|
- **str**: String expression to operate on.
|
|
Can be a constant, column, or function, and any combination of operators.
|
|
- **regexp**: Regular expression to operate on.
|
|
Can be a constant, column, or function, and any combination of operators.
|
|
- **start**: Optional start position (the first position is 1) to search for the regular expression.
|
|
Can be a constant, column, or function.
|
|
- **flags**: Optional regular expression flags that control the behavior of the
|
|
regular expression. The following flags are supported:
|
|
- **i**: (insensitive) Ignore case when matching.
|
|
- **m**: (multi-line) `^` and `$` match the beginning and end of a line, respectively.
|
|
- **s**: (single-line) `.` matches newline (`\n`).
|
|
- **R**: (CRLF) When multi-line mode is enabled, `\r\n` is used to delimit lines.
|
|
- **U**: (ungreedy) Swap the meaning of `x*` and `x*?`.
|
|
|
|
{{< expand-wrapper >}}
|
|
{{% expand "View `regexp_count` query example" %}}
|
|
|
|
_The following example uses the {{< influxdb3/home-sample-link >}}._
|
|
|
|
```sql
|
|
SELECT DISTINCT
|
|
room,
|
|
regexp_count(room::STRING, '[Ro]', 1, 'i') AS regexp_count
|
|
FROM home
|
|
```
|
|
|
|
| room | regexp_count |
|
|
| :---------- | -----------: |
|
|
| Kitchen | 0 |
|
|
| Living Room | 3 |
|
|
|
|
{{% /expand %}}
|
|
{{< /expand-wrapper >}}
|
|
|
|
## regexp_like
|
|
|
|
True if a regular expression has at least one match in a string;
|
|
false otherwise.
|
|
|
|
```sql
|
|
regexp_like(str, regexp[, flags])
|
|
```
|
|
|
|
##### Arguments
|
|
|
|
- **str**: String expression to operate on.
|
|
Can be a constant, column, or function, and any combination of string operators.
|
|
- **regexp**: Regular expression to test against the string expression.
|
|
Can be a constant, column, or function.
|
|
- **flags**: Optional regular expression flags that control the behavior of the
|
|
regular expression. The following flags are supported:
|
|
- **i**: (insensitive) Ignore case when matching.
|
|
- **m**: (multi-line) `^` and `$` match the beginning and end of a line, respectively.
|
|
- **s**: (single-line) `.` matches newline (`\n`).
|
|
- **R**: (CRLF) When multi-line mode is enabled, `\r\n` is used to delimit lines.
|
|
- **U**: (ungreedy) Swap the meaning of `x*` and `x*?`.
|
|
|
|
{{< expand-wrapper >}}
|
|
{{% expand "View `regexp_like` query example" %}}
|
|
|
|
_The following example uses the {{< influxdb3/home-sample-link >}}._
|
|
|
|
```sql
|
|
SELECT DISTINCT
|
|
room,
|
|
regexp_like(room::STRING, 'R', 'i') AS regexp_like
|
|
FROM home
|
|
```
|
|
|
|
| room | regexp_like |
|
|
| :---------- | :---------- |
|
|
| Kitchen | false |
|
|
| Living Room | true |
|
|
|
|
{{% /expand %}}
|
|
{{< /expand-wrapper >}}
|
|
|
|
## regexp_match
|
|
|
|
Returns a list of regular expression matches in a string.
|
|
|
|
```sql
|
|
regexp_match(str, regexp, flags)
|
|
```
|
|
|
|
##### Arguments
|
|
|
|
- **str**: String expression to operate on.
|
|
Can be a constant, column, or function, and any combination of string operators.
|
|
- **regexp**: Regular expression to match against.
|
|
Can be a constant, column, or function.
|
|
- **flags**: Regular expression flags that control the behavior of the
|
|
regular expression. The following flags are supported.
|
|
- **i**: (insensitive) Ignore case when matching.
|
|
|
|
{{< expand-wrapper >}}
|
|
{{% expand "View `regexp_match` query example" %}}
|
|
|
|
_The following example uses the {{< influxdb3/home-sample-link >}}._
|
|
|
|
> [!Note]
|
|
> `regexp_match` returns a _list_ Arrow type.
|
|
> Use _bracket notation_ to reference a value in the list.
|
|
> Lists use 1-based indexing.
|
|
|
|
```sql
|
|
SELECT DISTINCT
|
|
room,
|
|
regexp_match(room::STRING, '.{3}')[1] AS regexp_match
|
|
FROM home
|
|
```
|
|
|
|
| room | regexp_match |
|
|
| :---------- | :----------- |
|
|
| Kitchen | Kit |
|
|
| Living Room | Liv |
|
|
|
|
{{% /expand %}}
|
|
{{< /expand-wrapper >}}
|
|
|
|
## regexp_replace
|
|
|
|
Replaces substrings in a string that match a regular expression.
|
|
|
|
```sql
|
|
regexp_replace(str, regexp, replacement, flags)
|
|
```
|
|
|
|
##### Arguments
|
|
|
|
- **str**: String expression to operate on.
|
|
Can be a constant, column, or function, and any combination of string operators.
|
|
- **regexp**: Regular expression to match against.
|
|
Can be a constant, column, or function.
|
|
- **replacement**: Replacement string expression.
|
|
Can be a constant, column, or function, and any combination of string operators.
|
|
- **flags**: Regular expression flags that control the behavior of the
|
|
regular expression. The following flags are supported.
|
|
- **g**: (global) Search globally and don't return after the first match.
|
|
- **i**: (insensitive) Ignore case when matching.
|
|
|
|
{{< expand-wrapper >}}
|
|
{{% expand "View `regexp_replace` query example" %}}
|
|
|
|
_The following example uses the {{< influxdb3/home-sample-link >}}._
|
|
|
|
```sql
|
|
SELECT DISTINCT
|
|
room,
|
|
regexp_replace(room::STRING, '\sRoom', '', 'gi') AS regexp_replace
|
|
FROM home
|
|
```
|
|
|
|
| room | regexp_replace |
|
|
| :---------- | :------------- |
|
|
| Kitchen | Kitchen |
|
|
| Living Room | Living |
|
|
|
|
{{% /expand %}}
|
|
{{< /expand-wrapper >}}
|