- Save Regexctrl+s
- Update Regexctrl+⇧+s

- PCRE2 (PHP >=7.3)
- PCRE (PHP <7.3)
- ECMAScript (JavaScript)
- Python
- Golang
- Java 8

- Match
- Substitution
- List
- Unit Tests

Sponsor

Jamstack at Scale

/

^((https?|ftp):\/\/([a-z0-9_\x{00a1}-\x{ffff}]+([a-z0-9\-:@\x{00a1}-\x{ffff}]*[a-z0-9\x{00a1}-\x{ffff}]+)?([\.\-_][a-z0-9\x{00a1}-\x{ffff}]+)+)(\/[0-9a-z\-_.$%()\x{00a1}-\x{ffff}]*)*(:\d*)?\/?([?|#]([\w\d=_\-$&%.])*)*)$

/

gm

^ asserts position at start of a line

1st Capturing Group

((https?|ftp):\/\/([a-z0-9_\x{00a1}-\x{ffff}]+([a-z0-9\-:@\x{00a1}-\x{ffff}]*[a-z0-9\x{00a1}-\x{ffff}]+)?([\.\-_][a-z0-9\x{00a1}-\x{ffff}]+)+)(\/[0-9a-z\-_.$%()\x{00a1}-\x{ffff}]*)*(:\d*)?\/?([?|#]([\w\d=_\-$&%.])*)*)

2nd Capturing Group

(https?|ftp)

1st Alternative

https?

http

matches the characters http literally (case sensitive)s

matches the character s with index 1152nd Alternative

ftp

ftp

matches the characters ftp literally (case sensitive): matches the character : with index 58_{10} (3A_{16} or 72_{8}) literally (case sensitive)

\/ matches the character / with index 47_{10} (2F_{16} or 57_{8}) literally (case sensitive)

\/ matches the character / with index 47_{10} (2F_{16} or 57_{8}) literally (case sensitive)

3rd Capturing Group

([a-z0-9_\x{00a1}-\x{ffff}]+([a-z0-9\-:@\x{00a1}-\x{ffff}]*[a-z0-9\x{00a1}-\x{ffff}]+)?([\.\-_][a-z0-9\x{00a1}-\x{ffff}]+)+)

Match a single character present in the list below

[a-z0-9_\x{00a1}-\x{ffff}]

+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)

a-z matches a single character in the range between a (index 97) and z (index 122) (case sensitive)

0-9 matches a single character in the range between 0 (index 48) and 9 (index 57) (case sensitive)

_ matches the character _ with index 95_{10} (5F_{16} or 137_{8}) literally (case sensitive)

\x{00a1}-\x{ffff} matches a single character in the range between ¡ (index 161) and (index 65535) (case sensitive)

4th Capturing Group

([a-z0-9\-:@\x{00a1}-\x{ffff}]*[a-z0-9\x{00a1}-\x{ffff}]+)?

? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)

Match a single character present in the list below

[a-z0-9\-:@\x{00a1}-\x{ffff}]

* matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)

a-z matches a single character in the range between a (index 97) and z (index 122) (case sensitive)

0-9 matches a single character in the range between 0 (index 48) and 9 (index 57) (case sensitive)

\- matches the character - with index 45_{10} (2D_{16} or 55_{8}) literally (case sensitive)

:@

matches a single character in the list :@ (case sensitive)\x{00a1}-\x{ffff} matches a single character in the range between ¡ (index 161) and (index 65535) (case sensitive)

Match a single character present in the list below

[a-z0-9\x{00a1}-\x{ffff}]

+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)

a-z matches a single character in the range between a (index 97) and z (index 122) (case sensitive)

0-9 matches a single character in the range between 0 (index 48) and 9 (index 57) (case sensitive)

\x{00a1}-\x{ffff} matches a single character in the range between ¡ (index 161) and (index 65535) (case sensitive)

5th Capturing Group

([\.\-_][a-z0-9\x{00a1}-\x{ffff}]+)+

+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)

A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data

Match a single character present in the list below

[\.\-_]

\. matches the character . with index 46_{10} (2E_{16} or 56_{8}) literally (case sensitive)

\- matches the character - with index 45_{10} (2D_{16} or 55_{8}) literally (case sensitive)

_ matches the character _ with index 95_{10} (5F_{16} or 137_{8}) literally (case sensitive)

Match a single character present in the list below

[a-z0-9\x{00a1}-\x{ffff}]

+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)

a-z matches a single character in the range between a (index 97) and z (index 122) (case sensitive)

0-9 matches a single character in the range between 0 (index 48) and 9 (index 57) (case sensitive)

6th Capturing Group

(\/[0-9a-z\-_.$%()\x{00a1}-\x{ffff}]*)*

* matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)

A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data

\/ matches the character / with index 47_{10} (2F_{16} or 57_{8}) literally (case sensitive)

Match a single character present in the list below

[0-9a-z\-_.$%()\x{00a1}-\x{ffff}]

* matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)

0-9 matches a single character in the range between 0 (index 48) and 9 (index 57) (case sensitive)

a-z matches a single character in the range between a (index 97) and z (index 122) (case sensitive)

\- matches the character - with index 45_{10} (2D_{16} or 55_{8}) literally (case sensitive)

_.$%()

matches a single character in the list _.$%() (case sensitive)7th Capturing Group

(:\d*)?

? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)

: matches the character : with index 58_{10} (3A_{16} or 72_{8}) literally (case sensitive)

\d

matches a digit (equivalent to [0-9])* matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)

\/

matches the character / with index 47? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)

8th Capturing Group

([?|#]([\w\d=_\-$&%.])*)*

* matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)

A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data

Match a single character present in the list below

[?|#]

?|#

matches a single character in the list ?|# (case sensitive)9th Capturing Group

([\w\d=_\-$&%.])*

* matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data

Match a single character present in the list below

[\w\d=_\-$&%.]

\w matches any word character (equivalent to [a-zA-Z0-9_])

\d matches a digit (equivalent to [0-9])

=_

matches a single character in the list =_ (case sensitive)\- matches the character - with index 45_{10} (2D_{16} or 55_{8}) literally (case sensitive)

$&%.

matches a single character in the list $&%. (case sensitive)$ asserts position at the end of a line

Global pattern flags

g modifier: **g**lobal. All matches (don't return after first match)

m modifier: **m**ulti line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)

Your regular expression does not match the subject string.Try launching the debugger to find out why.

/

/

gm

Please wait while the app is loading...