
RegEx101.com now offers a debugger - Lindrian
http://regex101.com/?
======
WestCoastJustin
[http://rubular.com/](http://rubular.com/) is also really great! I use it
often when programming ruby regular expressions. Fill in a batch of test
strings into the box, then run your regular expression against it, and
instantly see (visually) what is happening. This is a BIG plus coming from
perl regex 10 years ago ;) This is not a dig a perl regex, but I just remember
it was a trial and error loop, where I would continually be iterating the
script to see if it worked, where as with this webpage, you just iterate, more
quickly.

They also have a great example:

    
    
      test string:
      Today's date is: 9/28/2013.
    
      regex:
      (?<month>\d{1,2})\/(?<day>\d{1,2})\/(?<year>\d{4})
    
      result:
      month	9
      day	28
      year	2013
    

Screenshot here:
[http://i.imgur.com/ixyHRde.png](http://i.imgur.com/ixyHRde.png)

~~~
VeejayRampay
Looking at regex101, the layout of the page looks awfully similar. It seems
that the author took Rubular and made it more generic. So yeah, props to
Rubular.

------
egor83
And a couple of alternatives:

[https://www.debuggex.com/](https://www.debuggex.com/)

(for Python flavor:

[https://www.debuggex.com/?flavor=python](https://www.debuggex.com/?flavor=python)
)

and one more Python + regex:

[http://www.pyregex.com/](http://www.pyregex.com/)

------
helloTree
What is it with the obsession with regular expressions? They are useful
things, sure, but I just use them in connection with grep or if I search for
strings and normally they are pretty basic, e.g.

$ grep -r -n --color "foo*bar" src

If I want to validate input data with the machine I just use a parser.

~~~
ghshephard
Regexes are an elegant and very powerful way to validate data in scripts in a
concise (and if they aren't abused) easy to read fashion. There are almost
infinite number of examples, but let's say I want to verify that a field is a
64 Bit hexadecimal MAC address

    
    
       $mac =~ ^[A-Fa-f0-9]{16}$
    

Gets the job done. How else, but a regular expression so concisely?

And, when you say, "If I want to validate input data with the machine I just
use a parser." \- that's pretty much what a regex engine is - a sophisticated
parser, and the regular expression is the "commands" that you feed to it to
parse the input text.

~~~
ghshephard
Here is another one I just did tonight - I wanted to match IPv4 addresses, but
didn't want to validate anything with a leading 0 (specifies octal format,
which 99.9999% of the time is not what people want), but I do want to accept a
leading 0 if it's the only value (I.E. 3.0.2.1, 0.0.0.0, etc...)

regex_ipv4='^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])$'

Gets the job done.

How else would you do it?

You can then build up a library of these, and use them on other projects.

~~~
MichaelSalib
Maybe something like this:

    
    
      def is_ipv4_addr(s):
         try:
            octets = s.split('.')
            assert len(octets) == 4
            for o in octets:
                assert 0 <= int(o.lstrip(0) or '0') < 256
         except:
            return False
         return True
    

It is longer; on the other hand, it is easier to read and more importantly
easier to verify correctness.

~~~
ghshephard
Would:

    
    
      1. 12 .13. 14
      089.23.45.67
    

Both match that? (Your general point is made though - RegExes look fine to the
person that just crafted them, but are opaque to the casual observer)

------
redox_
Would be ultra-cool if you could propose a "generate a matching sample"
button.

~~~
Lindrian
I have thought about this, but in cases where it would be useful, it's
impossible to generate a sample match string. For example, creating a match
string for /(?:a|[bc])efg?/ is super simple, but for something like:
/(ab(?1)*)/ it becomes much harder. Not to mention the performance hit you
would see for these more complex expressions. (These are just dummy
expressions for illustrative purposes, but I'm sure you get my gist.)

~~~
codexon
If there is a modifier with a variable number like ?,+,* you could just repeat
it X times.

For example if it is ? repeat 1 time, + repeat 2, * repeat 3 etc...

If it is |, choose the first or choose randomly.

------
Jugurtha
That's funny. Just yesterday I needed that and used pythex and a bunch of
other similar 'testers' to make sure my regular expression was good. It was,
but it somehow didn't work on the Mozilla Add-On Builder.

After asking a question on the #jetpack channel, members have spotted the
mistake: The regex was correct, but it needed to "match the exact string" as
mentioned on the doc. I've read it, but didn't understand that point. There
was a missing ". _" at the beginning and the end. So /._regex.*/

Thanks for putting this.

------
Lindrian
Forgot to tell you how to use it. Simply insert an expression and some text
and press the little red button right above the input for the regex. That's
all you have to do! Enjoy :)

------
thousande
The explanation box is nice!

Here is another regex tester:
[http://www.gethifi.com/tools/regex](http://www.gethifi.com/tools/regex)

------
eknkc
[http://www.regexper.com](http://www.regexper.com) is also awesome to
visualize regular expressions.

------
hclee
Not bad. You don't have to jump around your regexp reference and editor. It
does not exactly tell you why your exp & string does not match. It just show
what typed reg exp will do.

~~~
Lindrian
I think this shows quite clearly what is going on and why I get the result I
get:
[http://regex101.com/r/kU3cJ6/#debugger](http://regex101.com/r/kU3cJ6/#debugger)
(imgur link: [http://imgur.com/H2IkNGy](http://imgur.com/H2IkNGy))

If you don't agree with me, could you perhaps suggest an improvement?

~~~
hclee
I mean it does its job and it is good. I would use it. But look at this case;
test string inout [123:0] Asdfg

Exp (made it wrong in purpose) ^inout\s+\\[[0-9]\: It just display "No
Matches".

It would be cool if it kind of guide what exp you want to use to match test
string. What you put in Test string is what you want to get.

------
mattyod
I like it. Would be nice to be able to match against multiple test strings
though.

------
shmerl
How do you replay the tutorial once it's finished?

------
shocks
Lots of great information in this thread, thanks all!

