将 Javascript 正则表达式转换为 Java 语法

新手上路,请多包涵

我知道正则表达式在各种语言中都很常见……但是我在编写 Java 语法时遇到了麻烦。我有一个用 JS 编码的正则表达式;

 if((/[a-zA-Z]/).test(str) && (/[0-9]|[\x21-\x2F|\x3A-\x40|\x5B-\x60|\x7B-\x7E]/).test(str))
return true;

我如何用 Java 编写相同的内容?

我已经导入

import java.util.regex.Matcher;
import java.util.regex.Pattern;

只是补充一下,根据我的尝试,它说 \x 是一个无效的转义字符..

原文由 copenndthagen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

Change the leading and trailing '/' characters to '"' , and then replace each '\' with "\\" .

与 JavaScript、Perl 和其他脚本语言不同,Java 没有用于正则表达式的特殊语法。相反,它们(通常)使用 Java 字符串文字表示。但是 '\' 是 Java 字符串文字中的转义字符,因此原始正则表达式中的每个 '\' 必须使用第二个 '\' 进行转义(如果你在正则表达式中有一个文字反斜杠字符,你最终会在 Java 字符串文字中得到 "\\\\" !!)

这对 Java 新手来说有点令人困惑/望而生畏,但这是完全合乎逻辑的。请记住,您正在使用 Java 字符串文字 来表达正则表达式。


然而,正如@antak 指出的那样,Java 和 JavaScript 实现的正则表达式语言之间存在各种差异。因此,如果您采用任意 JavaScript 正则表达式并将其音译为 Java(如上所述),它可能无法正常工作。

以下是一些总结差异的参考资料。

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 https://regex101.com在线正则表达式评估器 进行转换。

  1. 转到 https://regex101.com
  2. 选择 ECMAScript (JavaScript) FLAVOR
  3. 插入你的正则表达式
  4. 打开 TOOLS -> Code Generator (LANGUAGE - Java)
  5. 复制粘贴

尽管这不是铁杆程序员的方式,但它更不容易出错。特别是如果您只需要转换一个或两个表达式。

原文由 Evgeny Kharitonov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题