1
+ package SomeUtils .Pattern ;
2
+
3
+ import java .util .regex .Pattern ;
4
+
5
+ public class PatternMaker {
6
+ //Just a demo.
7
+ public static void main (String []a ){
8
+ final PatternMaker maker =new PatternMaker ();
9
+ final String sample ="blah blach blah ..." ;
10
+ //Translates into:
11
+ //Match string "bla" and any character that occurs atleast once before a whitespace.
12
+ //After that, remember the match and see if it matches the string atleast once.
13
+ //Lastly, check if there are any more characters that occurs atleast once.
14
+ final Pattern pattern =maker .add ("bla" )
15
+ .any ()
16
+ .atleastOnce ()
17
+ .whitespace ()
18
+ .captureRecent ()
19
+ .atleast (1 )
20
+ .any ()
21
+ .atleastOnce ()
22
+ .compile ();
23
+ System .out .println ("This is what the pattern looks like:" );
24
+ System .out .println (pattern .toString ());
25
+ System .out .println ("Does it matches our sample string: " +sample +" ?" );
26
+ System .out .println ((pattern .matcher (sample ).matches ())?"Yes it does!" :"Nope, it doesn't." );
27
+ System .out .println ("This is what it looks like if we replace any match with just the letter 'e':" );
28
+ System .out .println (pattern .matcher (sample ).replaceAll ("e" ));
29
+ }
30
+ //The class itself.
31
+ final StringBuilder builder =new StringBuilder ();
32
+ public PatternMaker (){}
33
+ public PatternMaker (final String in ){
34
+ builder .append (in );
35
+ }
36
+ public PatternMaker (final Pattern in ){
37
+ builder .append (in .toString ());
38
+ }
39
+ public PatternMaker add (final String in ){
40
+ builder .append (in );
41
+ return this ;
42
+ }
43
+ public PatternMaker anyOf (final String in ){
44
+ builder .append ("[" ).append (in ).append ("]" );
45
+ return this ;
46
+ }
47
+ public PatternMaker notAnyOf (final String in ){
48
+ builder .append ("[^" ).append (in ).append ("]" );
49
+ return this ;
50
+ }
51
+ public PatternMaker rangeOf (final char in , final char in2 ){
52
+ builder .append (Character .toString (in ))
53
+ .append ("-" )
54
+ .append (Character .toString (in2 ));
55
+ return this ;
56
+ }
57
+ public PatternMaker or (final String in ){
58
+ builder .append ("|" ).append (in );
59
+ return this ;
60
+ }
61
+ public PatternMaker any (){
62
+ builder .append ("." );
63
+ return this ;
64
+ }
65
+ public PatternMaker beginsWith (final String in ){
66
+ builder .append ("^" ).append (in );
67
+ return this ;
68
+ }
69
+ public PatternMaker endsWith (final String in ){
70
+ builder .append (in ).append ("$" );
71
+ return this ;
72
+ }
73
+ public PatternMaker anyNumber (){
74
+ builder .append ("\\ d" );
75
+ return this ;
76
+ }
77
+ public PatternMaker whitespace (){
78
+ builder .append ("\\ s" );
79
+ return this ;
80
+ }
81
+ public PatternMaker wordBoundary (){
82
+ builder .append ("\\ b" );
83
+ return this ;
84
+ }
85
+ public PatternMaker unicode (final String in ){
86
+ if (in .startsWith ("\\ u" ))
87
+ builder .append (Character .toString (
88
+ (char )Integer .parseInt (in .substring (2 ), 16 )
89
+ ));
90
+ else
91
+ builder .append (Character .toString (
92
+ (char )Integer .parseInt (in , 16 )
93
+ ));
94
+ return this ;
95
+ }
96
+ public PatternMaker once (){
97
+ builder .append ("{1}" );
98
+ return this ;
99
+ }
100
+ public PatternMaker noneOrMore (){
101
+ builder .append ("*" );
102
+ return this ;
103
+ }
104
+ public PatternMaker onceOrNone (){
105
+ builder .append ("?" );
106
+ return this ;
107
+ }
108
+ public PatternMaker atleastOnce (){
109
+ builder .append ("+" );
110
+ return this ;
111
+ }
112
+ public PatternMaker occurOnly (final int in ){
113
+ builder .append ("{" ).append (String .valueOf (in )).append ("}" );
114
+ return this ;
115
+ }
116
+ public PatternMaker atleast (final int in ){
117
+ builder .append ("{" ).append (String .valueOf (in )).append (",}" );
118
+ return this ;
119
+ }
120
+ public PatternMaker atleastRange (final int from , final int to ){
121
+ builder .append ("{" )
122
+ .append (String .valueOf (from ))
123
+ .append ("," )
124
+ .append (String .valueOf (to ))
125
+ .append ("}" );
126
+ return this ;
127
+ }
128
+ public PatternMaker captureRecent (){
129
+ builder .insert (0 , "(" ).append (")" );
130
+ return this ;
131
+ }
132
+
133
+ /**From Pattern.java
134
+ *Go to their website for more details:
135
+ *https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/tip...
136
+ *.../src/share/classes/java/util/regex/Pattern.java
137
+ **/
138
+ public static final int UNIX_LINES =0x01 ;
139
+ public static final int CASE_INSENSITIVE =0x02 ;
140
+ public static final int COMMENTS =0x04 ;
141
+ public static final int MULTILINE =0x08 ;
142
+ public static final int LITERAL =0x10 ;
143
+ public static final int DOTALL =0x20 ;
144
+ public static final int CANON_EQ =0x80 ;
145
+ public static final int UNICODE_CHARACTER_CLASS =0x100 ;
146
+
147
+ public Pattern compile (){
148
+ return Pattern .compile (builder .toString ());
149
+ }
150
+ public Pattern compile (final int in ){
151
+ return Pattern .compile (builder .toString (), in );
152
+ }
153
+ @ Override
154
+ public String toString (){
155
+ return builder .toString ();
156
+ }
157
+ }
0 commit comments