Skip to main content

What is Regex?

Regex lets you define search patterns that match a wide range of text combinations. This is especially helpful when scammers use unpredictable variations of names or keywords.
Want to test your regex? Visit Rustexp — it uses the same Rust regex engine that Discord uses under the hood, so your results will be accurate.
You can also use regex101.com for general testing and its reference guide, but note that Discord may handle some patterns differently.

Basic Example

/name-filters add regex ^Pascal$ This matches only the exact word Pascal.
  • ^ = start of the name
  • Pascal = exact characters
  • $ = end of the name
So it will only match: Pascal
It will not match: Pascal_, SirPascal, or pascal

Case-Insensitive Example

To make a regex case-insensitive, use (?i) at the beginning: /name-filters add regex (?i)^Pascal$ This will match:
  • pascal
  • Pascal
  • PASCAL
  • pAsCaL
But won’t match:
  • Pascall
  • this is pascal
  • 0xPascal
/name-filters add regex (?i) bot$ This filter targets any username ending in a space followed by “bot” — a common impersonation tactic. It will match:
  • OpenSea BOT
  • AB bot
  • Doodles Best Bot
It will not match:
  • bottom
  • best bots
  • bot (without a space in front)
Note: There is an intentional space in the filter: (?i) bot$

Quick Reference

SyntaxMeaningExample
.Any single charactersc.m matches scam, sc@m, sc1m
*Zero or more of the previousbo*t matches bt, bot, boot
+One or more of the previousbo+t matches bot, boot but not bt
?Zero or one of the previouscolou?r matches color and colour
[abc]Any character in the set[a@4]dmin matches admin, @dmin, 4dmin
[^abc]Any character NOT in the set[^a-z]bot matches 1bot but not abot
^Start of the name^admin matches admin_123 but not notadmin
$End of the namebot$ matches scambot but not bottled
(a|b)Either a or b(support|help) matches both
(?i)Case-insensitive mode(?i)admin matches ADMIN, Admin, etc.
\Escape a special character\.com matches literal .com (not “Xcom”)
Escape special characters. Characters like . * + ? ( ) [ ] { } \ | ^ $ have special meaning in regex. To match them literally, prefix with \. For example, use \. to match a period and \( to match a parenthesis.

Common Filter Patterns

GoalPatternMatches
Names ending in “bot”(?i) bot$OpenSea BOT, AB bot
Names starting with “admin”(?i)^adminAdmin_NFT, administrator
Catch ”@” substitution(?i)[a@]dminadmin, @dmin
Block leet speak(?i)supp[o0]rtsupport, supp0rt
Exact name only^Pascal$Pascal (nothing else)

Limitations

Hashbot uses the Rust regex engine (same as Discord). A few things are not supported:
  • Lookahead/lookbehind(?=...), (?!...), (?<=...), (?<!...) will not work
  • Backreferences\1, \2 etc. are not available
  • Possessive quantifiers*+, ++ are not supported
If you need these features, consider breaking your pattern into multiple simpler filters instead.

Caution & Best Practices

  • Always test your regex on Rustexp before adding it (uses the same Rust regex engine as Discord)
  • Run /cleanse after adding a new filter — results are displayed with a “Review on Dashboard” button at dashboard.hashbot.com
  • Avoid overly broad patterns like .+ or .* — they match nearly everything
  • If you accidentally create an overly broad filter:
    1. Use /settings pause pause-state:pause to stop Hashbot from acting
    2. Remove the problematic filter
    3. Use /settings pause pause-state:unpause to resume normal operation
    4. Cancel any pending /cleanse jobs if needed

Need Help?

Regex can be tricky. If you’re not confident, join our Support Discord and open a ticket.
We’re happy to help build or review filters with you.