将这些正则表达式从javascript转换为Java

时间:2012-09-12 06:40:19

标签: java javascript regex

我已经在Javascript中使用了正则表达式,现在我想将它们翻译成Java:

            var nat_pattern2 = /^\d{8}$/;
            var nat_pattern2 = /^\d{7}\-\d{1}$/;

            var pct_pattern1 = /^\PCT\/?[A-Z]{2}?\d{4}\/\d{6}$/;
            var ing pct_pattern2 = /^\PCT[A-Z]{2}\d{10}$/;
            var pct_pattern3 = /^\P[A-Z]{2}\d{8}$/;

            var its_pattern1 = /^\ITS\/?[A-Z]{2}?\d{2}\/\d{5}$/;
            var its_pattern2 = /^\ITS[A-Z]{2}\d{7}$/;
            var its_pattern3 = /^\I[A-Z]{2}\d{7}$/;

我的开头看起来像这样,但不正确:

Pattern pattern = Pattern.compile("/^\d{8}$/");

你能帮助我吗?

3 个答案:

答案 0 :(得分:2)

在Java中,你的regexp周围不需要/\d要转义,以便成为定义正则表达式的字符串的一部分,因此它将成为\\d

Pattern pattern = Pattern.compile("^\\d{8}$");

斜杠没有特殊含义,因此也不需要进行转义。

Pattern natPattern1 = Pattern.compile("^\\d{8}$");
Pattern natPattern2 = Pattern.compile("^\\d{7}-\\d{1}$");

Pattern pctPattern1 = Pattern.compile("^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$");
Pattern pctPattern2 = Pattern.compile("^PCT[A-Z]{2}\\d{10}$");
Pattern pctPattern3 = Pattern.compile("^P[A-Z]{2}\\d{8}$");

Pattern itsPattern1 = Pattern.compile("^ITS/?[A-Z]{2}?\\d{2}/\\d{5}$");
Pattern itsPattern2 = Pattern.compile("^ITS[A-Z]{2}\\d{7}$");
Pattern itsPattern3 = Pattern.compile("^I[A-Z]{2}\\d{7}$");

答案 1 :(得分:2)

将正则表达式从JS转换为JAVA的要点:

  • 无需包围/
  • 需要逃避\(例如\\.而不是\.
  • 无需逃避/(即\/变为/
  • 没有最终标志(例如gi

您现在可以在自己的;)

上翻译正则表达式了

答案 2 :(得分:1)

\用于在Java-Strings中转义。所以你必须逃避。所以你的String看起来像这样:

Pattern pattern = Pattern.compile("^\\d{8}$");

如前所述,领先和结束/不需要。

请注意,如果你想匹配\你必须在你的正则表达式中逃避它。这意味着您可以在Java String中对其进行双重转义。 要匹配\你必须在Java中连接\\。