Created
September 21, 2010 04:17
-
-
Save tathamoddie/589179 to your computer and use it in GitHub Desktop.
Analysis of some interesting regular expressions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
^1?$|^(11+?)\1+$ | |
Tokens: | |
^ StartOfStringAssertion | |
1 Literal | |
? Quantifier | |
$ EndOfStringAssertion | |
| OrOperator | |
^ StartOfStringAssertion | |
( GroupStart | |
11 Literal | |
+? Quantifier | |
) GroupEnd | |
\ CharacterEscapeOrBackReferenceMarker | |
1 CharacterEscapeOctalDataOrBackReferenceNumberOrCharacter | |
+ Quantifier | |
$ EndOfStringAssertion | |
AST: | |
1. ^1?$|^(11+?)\1+$ alternation expression AlternationNode | |
2. ^1?$ subexpression SubExpressionNode | |
3. ^ start of string assertion StartOfStringAssertionNode | |
4. 1? zero or one times QuantifierNode{Min=0,Max=1} | |
5. 1 '1' character LiteralNode{Text='1'} | |
6. $ end of string assertion EndOfStringAssertionNode | |
7. | or operator OrOperatorNode | |
8. ^(11+?)\1+$ subexpression SubExpressionNode | |
9. ^ start of string assertion StartOfStringAssertionNode | |
10. (11+?) group number 1 GroupingNode{Number=1} | |
11. 1 '1' character LiteralNode{Text='1'} | |
12. 1+? at least once but lazy QuantifierNode{Min=1,Max=null,Lazy=true} | |
13. 1 '1' character LiteralNode{Text='1'} | |
14. \1+ one or more times QuantifierNode{Min=1,Max=null} | |
15. \1 back reference NumberBackReferenceNode{Ref=1} | |
16. $ end of string assertion EndOfStringAssertionNode | |
Variables: | |
1 = 2 or 8 = 6 | |
4 = 0 or 1 = 2 | |
12 = 1 or 3 = 2 | |
14 = 1 or 3 = 2 | |
=> 6 generated examples | |
Example matches: | |
"" | |
when 1=2, 4=0 | |
"1" | |
when 1=2, 4=1 | |
"1111" | |
when 2=8, 12=1, 14=1 | |
"11111111" | |
when 2=8, 12=1, 14=3 | |
"11111111" | |
when 2=8, 12=3, 14=1 | |
"1111111111111111" | |
when 2=8, 12=3, 14=3 | |
===================================================== | |
^[a-zA-Z0-9]+((.?|\-*)[a-zA-Z0-9]+)*$ | |
Tokens: | |
^ StartOfStringAssertion | |
[ CharacterSetStart | |
a Character | |
- CharacterRangeSeparator | |
z Character | |
A Character | |
- CharacterRangeSeparator | |
Z Character | |
0 Character | |
- CharacterRangeSeparator | |
9 Character | |
] CharacterSetEnd | |
+ Quantifier | |
( GroupStart | |
( GroupStart | |
. AnyCharacter | |
? Quantifier | |
| OrOperator | |
\ CharacterEscapeMarker | |
- CharacterEscapeData | |
* Quantifier | |
) GroupEnd | |
[ CharacterSetStart | |
a Character | |
- CharacterRangeSeparator | |
z Character | |
A Character | |
- CharacterRangeSeparator | |
Z Character | |
0 Character | |
- CharacterRangeSeparator | |
9 Character | |
] CharacterSetEnd | |
+ Quantifier | |
) GroupEnd | |
* Quantifier | |
$ EndOfStringAssertion | |
AST: | |
1. ^ start of string assertion StartOfStringAssertionNode | |
2. [a-zA-Z0-9]+ one or more times QuantifierNode{Min=1,Max=null} | |
3. [a-zA-Z0-9] character set CharacterSetNode | |
4. a-z charcter range a-z CharacterRangeNode{Min=a,Max=z} | |
5. A-Z charcter range A-Z CharacterRangeNode{Min=A,Max=Z} | |
6. 0-9 charcter range 0-9 CharacterRangeNode{Min=0,Max=9} | |
7. ((.?|\-*)[a-zA-Z0-9]+)* zero or more times QuantifierNode{Min=0,Max=null} | |
8. ((.?|\-*)[a-zA-Z0-9]+) group number 1 GroupingNode{Number=1} | |
9. (.?|\-*) group number 2 GroupingNode{Number=2} | |
10. .?|\-* alternation expression AlternationNode | |
11. .? subexpression SubExpressionNode | |
12. .? zero or one times QuantifierNode{Min=0,Max=1} | |
13. . any character CharacterClassNode{Class=Any} | |
14. | or operator OrOperatorNode | |
15. \-* subexpression SubExpressionNode | |
16. \-* zero or more times QuantifierNode{Min=0,Max=null} | |
17. \- '-' character LiteralNode{Text='-'} | |
18. [a-zA-Z0-9]+ one or more times QuantifierNode{Min=1,Max=null} | |
19. [a-zA-Z0-9] character set CharacterSetNode | |
20. a-z charcter range a-z CharacterRangeNode{Min=a,Max=z} | |
21. A-Z charcter range A-Z CharacterRangeNode{Min=A,Max=Z} | |
22. 0-9 charcter range 0-9 CharacterRangeNode{Min=0,Max=9} | |
22. $ end of string assertion EndOfStringAssertionNode | |
Variables: | |
2 = 1 or 3 = 12 | |
3 = a-z or A-Z or 0-9 = 6 | |
4 = a or d = 2 | |
5 = A or D = 2 | |
6 = 0 or 3 = 2 | |
7 = 0 or 1 or 3 = 27 | |
10 = 11 or 15 = 9 | |
12 = 0 or 1 = 6 | |
13 = a or A or 1 = 3 | |
16 = 0 or 1 or 3 = 3 | |
18 = 1 or 3 = 12 | |
19 = a-z or A-Z or 0-9 = 6 | |
20 = a or d = 2 | |
21 = A or D = 2 | |
22 = 0 or 3 = 2 | |
=> 39 generated examples | |
Example matches: | |
"a" | |
when 2=1, 3=a, 7=0 | |
"aa" | |
when 2=1, 3=a, 7=1, 10=11, 12=0, 18=1, 19=20, 20=a | |
"aA" | |
when 2=1, 3=a, 7=1, 10=11, 12=0, 18=1, 19=21, 22=A | |
"a1" | |
when 2=1, 3=a, 7=1, 10=11, 12=0, 18=1, 19=22, 22=1 | |
... | |
===================================================== | |
$^ | |
Tokens: | |
$ EndOfStringAssertion | |
^ StartOfStringAssertion | |
AST: | |
1. $ end of string assertion EndOfStringAssertionNode | |
2. ^ start of string assertion StartOfStringAssertionNode | |
Variables: | |
none | |
=> 0 generated examples | |
Example matches: | |
none | |
===================================================== | |
[a-z]] | |
Tokens: | |
[ CharacterSetStart | |
a Character | |
- CharacterRangeSeparator | |
z Character | |
] CharacterSetEnd | |
] Literal | |
AST: | |
1. [a-z] character set CharacterSetNode | |
2. a-z charcter range a-z CharacterRangeNode{Min=a,Max=z} | |
3. ] ']' character LiteralNode{Text=']'} | |
Variables: | |
1 = a-z = 1 | |
2 = a or d = 2 | |
=> 2 generated examples | |
Example matches: | |
"a]" | |
when 1=a-z, 2=a | |
"d]" | |
when 1=a-z, 2=d | |
===================================================== | |
[[a-z] | |
Tokens: | |
[ CharacterSetStart | |
[ Character | |
a Character | |
- CharacterRangeSeparator | |
z Character | |
] CharacterSetEnd | |
AST: | |
1. [[a-z] character set CharacterSetNode | |
2. [ '[' character CharacterNode{Character='['} | |
3. a-z charcter range a-z CharacterRangeNode{Min=a,Max=z} | |
Variables: | |
1 = [ or a-z = 3 | |
3 = a or d = 2 | |
=> 3 generated examples | |
Example matches: | |
"[" | |
when 1=[ | |
"a" | |
when 1=a-z, 3=a | |
"d" | |
when 1=a-z, 3=d | |
===================================================== | |
[[a-z]] | |
Tokens: | |
[ CharacterSetStart | |
[ Character | |
a Character | |
- CharacterRangeSeparator | |
z Character | |
] CharacterSetEnd | |
] Literal | |
AST: | |
1. [[a-z] character set CharacterSetNode | |
2. [ '[' character CharacterNode{Character='['} | |
3. a-z charcter range a-z CharacterRangeNode{Min=a,Max=z} | |
4. ] ']' character LiteralNode{Text=']'} | |
Variables: | |
1 = [ or a-z = 3 | |
3 = a or d = 2 | |
=> 3 generated examples | |
Example matches: | |
"[]" | |
when 1=[ | |
"a]" | |
when 1=a-z, 3=a | |
"d]" | |
when 1=a-z, 3=d |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment