Index: src/org/jruby/RegexpTranslator.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/RegexpTranslator.java,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 RegexpTranslator.java
--- src/org/jruby/RegexpTranslator.java	6 Jan 2006 00:44:21 -0000	1.1.2.2
+++ src/org/jruby/RegexpTranslator.java	14 Feb 2006 04:26:40 -0000
@@ -13,9 +13,9 @@
 	private static final Pattern SPACE_IN_CHARACTER_CLASS_PATTERN = Pattern.compile("(\\[[^]]*) (.*?])");
 	private static final Pattern COMMENT_PATTERN = Pattern.compile("\\(\\?#[^)]*\\)");
     private static final Pattern HEX_SINGLE_DIGIT_PATTERN = Pattern.compile("\\\\x(\\p{XDigit})(?!\\p{XDigit})");
-    private static final Pattern OCTAL_SINGLE_DIGIT_PATTERN = Pattern.compile("\\\\([0-7])(?![0-7])");
     private static final Pattern OCTAL_THREE_DIGIT_PATTERN = Pattern.compile("\\\\([1-3][0-7]{2})");
-
+    private static final Pattern OCTAL_MISSING_ZERO_PATTERN = Pattern.compile("\\\\([1-7][0-7]{1,2})");
+    
     public Pattern translate(String regex, int options, int javaRegexFlags) {
     	javaRegexFlags |= translateFlags(options);
 		regex = translatePattern(regex, (javaRegexFlags & Pattern.COMMENTS) != 0);
@@ -25,12 +25,13 @@
 	String translatePattern(String regex, boolean commentsAllowed) {
 		regex = COMMENT_PATTERN.matcher(regex).replaceAll("");
 		regex = HEX_SINGLE_DIGIT_PATTERN.matcher(regex).replaceAll("\\\\"+"x0$1");
-		regex = OCTAL_SINGLE_DIGIT_PATTERN.matcher(regex).replaceAll("\\\\"+"0$1");
 		regex = OCTAL_THREE_DIGIT_PATTERN.matcher(regex).replaceAll("\\\\"+"0$1");
+		regex = OCTAL_MISSING_ZERO_PATTERN.matcher(regex).replaceAll("\\\\"+"0$1");
 		if (commentsAllowed) {
 			regex = SPACE_IN_CHARACTER_CLASS_PATTERN.matcher(regex).replaceAll("$1\\\\x20$2");
 			regex = SHARP_IN_CHARACTER_CLASS_PATTERN.matcher(regex).replaceAll("$1\\\\x23$2");
 		}
+		
 		return regex;
 	}
 	
Index: src/org/jruby/RubyRegexp.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/RubyRegexp.java,v
retrieving revision 1.24.2.3
diff -u -r1.24.2.3 RubyRegexp.java
--- src/org/jruby/RubyRegexp.java	26 Jan 2006 05:27:31 -0000	1.24.2.3
+++ src/org/jruby/RubyRegexp.java	14 Feb 2006 04:26:40 -0000
@@ -47,11 +47,9 @@
  * @author  amoore
  */
 public class RubyRegexp extends RubyObject implements ReOptions {
-    private static final Pattern COMMENT_PATTERN = Pattern.compile("\\(\\?#[^)]*\\)");
-    private static final Pattern HEX_SINGLE_DIGIT_PATTERN = Pattern.compile("\\\\x(\\p{XDigit})(?!\\p{XDigit})");
-    private static final Pattern OCTAL_SINGLE_DIGIT_PATTERN = Pattern.compile("\\\\([0-7])(?![0-7])");
-    private static final Pattern OCTAL_MISSING_ZERO_PATTERN = Pattern.compile("\\\\([1-7][0-7]+)");
-    /** Class which represents the multibyte character set code.
+    private static final RegexpTranslator REGEXP_TRANSLATOR = new RegexpTranslator();
+
+	/** Class which represents the multibyte character set code.
 	 * (should be an enum in Java 5.0).
 	 * 
 	 * Warning: THIS IS NOT REALLY SUPPORTED BY JRUBY. 
@@ -140,21 +138,7 @@
     }
 
     public void initialize(String regex, int options) {
-    	int flags = Pattern.MULTILINE;
-        if ((options & RE_OPTION_IGNORECASE) > 0) {
-            flags |= Pattern.CASE_INSENSITIVE;
-        }
-        if ((options & RE_OPTION_EXTENDED) > 0) {
-        	flags |= Pattern.COMMENTS;
-        }
-        if ((options & RE_OPTION_MULTILINE) > 0) {
-        	flags |= Pattern.DOTALL;
-        }
-        regex = COMMENT_PATTERN.matcher(regex).replaceAll("");
-        regex = HEX_SINGLE_DIGIT_PATTERN.matcher(regex).replaceAll("\\\\"+"x0$1");
-        regex = OCTAL_SINGLE_DIGIT_PATTERN.matcher(regex).replaceAll("\\\\"+"0$1");
-        regex = OCTAL_MISSING_ZERO_PATTERN.matcher(regex).replaceAll("\\\\"+"0$1");
-        pattern = Pattern.compile(regex, flags | this.code.flags());
+        pattern = REGEXP_TRANSLATOR.translate(regex, options, code.flags());
     }
 
     public static String quote(String orig) {
Index: test/org/jruby/TestRegexpTranslator.java
===================================================================
RCS file: /cvsroot/jruby/jruby/test/org/jruby/TestRegexpTranslator.java,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 TestRegexpTranslator.java
--- test/org/jruby/TestRegexpTranslator.java	6 Jan 2006 00:44:21 -0000	1.1.2.2
+++ test/org/jruby/TestRegexpTranslator.java	14 Feb 2006 04:26:41 -0000
@@ -31,7 +31,7 @@
 		verifyTranslation("\\0177", 	"\\177",false);
 		verifyTranslation("\\0277", 	"\\277",false);
 		verifyTranslation("\\0377", 	"\\377",false);
-		verifyTranslation("\\477", 		"\\477",false);
+		verifyTranslation("\\0477", 		"\\477",false);
 	}
 
 	private void verifyTranslation(String expected, String rubyRE, boolean withComments) {
