## Regex Slots

_Regex Slots_ are user-defined Slots, which apply [regular expressions](https://regex101.com/) (regex) to match and extract specific patterns from user inputs. Unlike Lexicon Slots, which rely on Keyphrases, Regex Slots are ideal for structured data that follows a predictable format, such as:

- Phone numbers (`(123) 456-7890`)
- Email addresses (`user@example.com`)
- Product codes (`ABC-123-XYZ`)

You can use this type of Regex Slots only as [Slot Fillers](https://docs.cognigy.com/ai/platform-features/nlu/slot-fillers).

## Recommendations

- Regex Slots require careful crafting to avoid overly broad or restrictive patterns.
- Complex regular expressions can be error-prone; test them thoroughly to avoid missing matches or capturing incorrect data.
- Avoid conflicts with Lexicon Slots and System Slots by ensuring unique Slot names.

## Working with Regex Slots

To start working with Regex Slots, you can use one of the following options:

- Apply to an Entire Flow
- Apply After a Specific Point in a Flow

To define a regex pattern that runs on all user inputs in the Flow, follow these steps:

1. In the Flow editor, go to **NLU > Slot Fillers**.
2. In the upper-left corner, click **\+ New Slot Filler**.
3. In the **New Slot Filler** window, fill in the following fields:
   - **Name** – enter a unique name for the Slot Filler. For example, `phone_number`.
   - **Type** – select **Regular Expression**.
   - **Regular Expression** – enter a regex pattern. Patterns must start and end with `/`. Flags like `g` for global matching aren’t supported.
   - **Context Key** – enter a Slot name to store the matched data in the Context object. For example, `phone_number`.

To define a regex pattern that runs after a specific user input in the Flow, follow these steps:

1. In the Flow editor, add a [Regex Slot Filler](https://docs.cognigy.com/ai/agents/develop/node-reference/ai/regex-slot-filler) Node where you want to process the input, for example, after a Question Node.
2. In the Node editor, configure the following fields:
   - **Regular Expression** - enter a regex pattern without leading and trailing slashes, for example, `^\d{3}-\d{3}-\d{4}$`.
   - **Flags** – enter flags you want to apply to the regular expression, for example, `i` for case-insensitive, `m` for multiline. Note that the `g` flag should always be specified.
   - **Slot Name** – enter the Slot name to store the matched data in the `slots.<slot-name>` Input object. For example, `phone_number`.

Once a Regex Slot is filled, the extracted data can be used in the conversation logic, for example, for the following purposes:

- Validating user input, for example, ensuring a valid email format.
- Triggering specific actions, for example, saving a phone number to the Contact Profile.
- Combining with Question Nodes to prompt users to re-enter missing or incorrectly formatted information.

### Example

These examples show how regex patterns fill Slots in the Context object.

**Single Match**

**User Input**: `My phone number is 555-123-4567`

**Regex Pattern**: `/\d{3}-\d{3}-\d{4}/`

**Slot Name**: `phone_number`

**Result**: The `context.phone_number` Slot is filled with `555-123-4567`. The AI Agent responds `Thanks for providing your phone number: {{context.slots.phone_number}}!`

**Multiple Matches**

When the user input contains multiple values that match the pattern, only the first match is stored.

**User Input**: `The booking codes are 123456 and 789123`

**Regex Pattern**: `/\b\d{6}\b/`

**Slot Name**: `booking_codes`

**Result**: The `context.booking_codes` Slot is filled with `123456`.

## Use Cases

- Extracting a booking code: `/^[A-Z]{3}-\d{4}$/` to capture `XYZ-1234`.
- Capturing email addresses with the `@company` domain: `/^[a-zA-Z0-9._%+-]+@company\.com$/`.
- Identifying dates in specific formats: `/^\d{2}\/?\d{2}\/?\d{4}$/` for `04/22/2025`.

## More Information

- [Lexicon Slots](https://docs.cognigy.com/ai/platform-features/nlu/slots/user-defined/lexicon)
- [Overview](https://docs.cognigy.com/ai/platform-features/nlu/slots/user-defined/overview)
- [System-Defined](https://docs.cognigy.com/ai/platform-features/nlu/slots/system-defined)
