0

我有正则表达式在 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}$/");

你能帮助我吗?

4

3 回答 3

2

您不需要/在 Java 中使用您的正则表达式。\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}$");
于 2012-09-12T06:41:54.703 回答
2

将正则表达式从 JS 翻译成 JAVA 的要点:

  • 无需环绕/
  • 需要逃跑\(例如\\.代替\.
  • 无需逃避/(即\/成为/
  • 没有最终标志(例如g, i

您现在可以自己翻译您的正则表达式;)

于 2012-09-12T07:19:55.707 回答
1

\ 用于在 Java 字符串中转义。因此,您必须逃避 . 所以你的字符串看起来像这样:

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

如前所述,不需要开头和结尾 / 。

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

于 2012-09-12T06:47:01.500 回答