- StringBuffer s1 = new StringBuffer();\r
- StringBuffer s2 = new StringBuffer();\r
- int i=0,count=0;\r
- char mode,delim='/',cdelim='/';\r
- if(s.length() >= 3 && s.charAt(0)=='s') {\r
- mode = 's';\r
- delim = s.charAt(1);\r
- cdelim = close(delim);\r
- i=2;\r
- } else if(s.length() >= 2 && s.charAt(0)=='m') {\r
- mode = 'm';\r
- delim = s.charAt(1);\r
- cdelim = close(delim);\r
- i=2;\r
- } else if(s.length() >= 1 && s.charAt(0)=='/') {\r
- mode = 'm';\r
- i=1;\r
- } else {\r
- try {\r
- RegSyntaxError.endItAll(\r
- "Regex.perlCode should be of the "+\r
- "form s/// or m// or //");\r
- } catch(RegSyntax rs) {}\r
- return null;\r
- }\r
- for(;i<s.length();i++) {\r
- if(s.charAt(i)=='\\') {\r
- s1.append('\\');\r
- i++;\r
- } else if(s.charAt(i)==cdelim && count==0) {\r
- i++;\r
- break;\r
- } else if(s.charAt(i)==delim && cdelim != delim) {\r
- count++;\r
- } else if(s.charAt(i)==cdelim && cdelim != delim) {\r
- count--;\r
- }\r
- s1.append(s.charAt(i));\r
+ final static Regex parse(String s)\r
+ {\r
+ boolean igncase = false, optim = false, gFlag = false;\r
+ boolean sFlag = false, mFlag = false, xFlag = false;\r
+\r
+ StringBuffer s1 = new StringBuffer();\r
+ StringBuffer s2 = new StringBuffer();\r
+ int i = 0, count = 0;\r
+ char mode, delim = '/', cdelim = '/';\r
+ if (s.length() >= 3 && s.charAt(0) == 's')\r
+ {\r
+ mode = 's';\r
+ delim = s.charAt(1);\r
+ cdelim = close(delim);\r
+ i = 2;\r
+ }\r
+ else if (s.length() >= 2 && s.charAt(0) == 'm')\r
+ {\r
+ mode = 'm';\r
+ delim = s.charAt(1);\r
+ cdelim = close(delim);\r
+ i = 2;\r
+ }\r
+ else if (s.length() >= 1 && s.charAt(0) == '/')\r
+ {\r
+ mode = 'm';\r
+ i = 1;\r
+ }\r
+ else\r
+ {\r
+ try\r
+ {\r
+ RegSyntaxError.endItAll(\r
+ "Regex.perlCode should be of the " +\r
+ "form s/// or m// or //");\r
+ }\r
+ catch (RegSyntax rs)\r
+ {}\r
+ return null;\r
+ }\r
+ for (; i < s.length(); i++)\r
+ {\r
+ if (s.charAt(i) == '\\')\r
+ {\r
+ s1.append('\\');\r
+ i++;\r
+ }\r
+ else if (s.charAt(i) == cdelim && count == 0)\r
+ {\r
+ i++;\r
+ break;\r
+ }\r
+ else if (s.charAt(i) == delim && cdelim != delim)\r
+ {\r
+ count++;\r
+ }\r
+ else if (s.charAt(i) == cdelim && cdelim != delim)\r
+ {\r
+ count--;\r
+ }\r
+ s1.append(s.charAt(i));\r
+ }\r
+ if (mode == 's' && cdelim != delim)\r
+ {\r
+ while (i < s.length() && Prop.isWhite(s.charAt(i)))\r
+ {\r
+ i++;\r
+ }\r
+ if (i >= s.length())\r
+ {\r
+ try\r
+ {\r
+ RegSyntaxError.endItAll("" + mode + delim + " needs " + cdelim);\r