0

我试图在我的 Java 应用程序中转义一个字符串,该字符串将用于 Ruby 脚本中的正则表达式匹配

我尝试Pattern.quote(s)在Java中使用,但似乎只添加了前缀\Q和后缀\E

例如,这是我想从我的 Java 应用程序中转义并用于我的 Ruby 脚本的字符串。

export PATH=/usr/local/eclipse:${JAVA_HOME}/bin:${PATH}

我想我总是可以使用String.replace("/","\\/"),String.replace("$", "\\$")等等,但如果有更简单的方法来做到这一点,那就太好了。

4

2 回答 2

0

由于 Java 对 Ruby 正则表达式的了解不多,我敢冒险在 Ruby 中这样做会更容易和方便。

string_from_java = 'export PATH=/usr/local/eclipse:${JAVA_HOME}/bin:${PATH}'
escaped_string = Regexp.escape(string_from_java)
pattern = /someprefix#{escaped_string}somesuffix/
于 2013-10-26T22:20:54.363 回答
0

是的,他们选择这种方法而不是反斜杠转义总是困扰着我。这是我使用的:。

public static String quotemeta(String str)
{
  if (str == null)
  {
    throw new IllegalArgumentException("String cannot be null");
  }

  int len = str.length();
  if (len == 0)
  {
    return "";
  }

  StringBuffer sb = new StringBuffer(len * 2);
  for (int i = 0; i < len; i++)
  {
    char c = str.charAt(i);
    if ("\\[](){}.*+?$^|#/".indexOf(c) != -1)
    {
      sb.append("\\");
    }
    sb.append(c);
  }
  return sb.toString();
}

我有理由确定这会产生 Ruby 安全的字符串。我写的时候确实考虑到了可移植性。这就是为什么它会转义除尖括号以及井号 ( ) 和正斜杠 ( ) 之外的所有括号字符(打开关闭)。 #/

于 2013-10-26T22:55:49.357 回答