Abnormal expressions
Abnormal expressions (abnex) is an alternative to regular expressions (regex).
This is a Python library but the abnex syntax could be ported to other languages.
Examples
Matching an email address
Why is Abnex Better?
- It's easier to read, write and understand.
- You can use spaces inside of the expression, you can also "expand" it, i.e. write it over multiple lines and use indention.
- You don't have to use a backslashes all the time
- More logical/common symbols like
!
for not, {}
for groups, 1++
, 0++
, 0+
for: one or more, zero or more, zero or one.
- It's easier to see if a symbol is an actual symbol you are searching for or if it's a regex character, ex:
- Regex:
[\w-]+@[\w-_]+
- Abnex:
[w "-"]1++ "@" [w "-"]1++
Documentation
Regex on right after -> is the abnex equivalent
Anchors
- Start of string, or start of line in multi-line pattern
- End of string, or end of line in multi-line pattern
- Start of string
- End of string
- Word boundary
- Not word boundary
- Start of word
- End of word
Character Classes
- Control character
- White space
- Not white space
- Digit
- Not digit
- Word
- Not word
- HexadeĀcimal digit
- Octal digit
Quantifiers
- 0 or more
- 1 or more
- 0 or 1
Groups and Ranges
- Any character except new line (\n)
- a or b
- Group
- Passive (non-cĀaptĀuring) group
- Range (a or b or c)
[abc]
-> ['abc']
or ["a" "b" "c"]
- Not in set
- Lower case letter from a to Z
- Upper case letter from A to Q
- Digit from 0 to 7
Standards
What is the recommended way to write abnexes
- Use spaces between characters in character sets:
- Correct:
[w "_-"]
- Incorrect:
[w"_-"]
- Put multiple exact characters between the same quotes in character sets:
- Correct:
["abc"]
- Incorrect:
["a" "b" "c"]
, especially incorrect: ["a""b""c"]
- Put spaces between groups:
- Correct:
{w} "." {w}
- Incorrect:
{w}"."{w}
Examples:
Match for an email address:
- Regex:
- Abnex (following standards):
{[w "-._"]1++} "@" {[w "-."]1++}
- Abnex (not following standards):
{[w"-._"]1++}"@"{[w"-."]1++}
Functions (In Python)
Abnex has most functions from the re
library, but it also has som extra functionality like: last()
& contains()
.
Common functions between re and abnex
Regex on right after -> is the abnex equivalent
match()
-> match()
findall()
-> all()
split()
-> split()
sub()
-> replace()
subn()
-> replace_count()
search()
-> first()
Special to abnex
holds()
: whether or not a string matches an expression (bool).
contains()
: wheter or not a string contains a match (bool).
last()
: the last match in a string.