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

2022-09-01 06:31:45

我知道正则表达式在各种语言中是通用的...但是我在编写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是一个无效的转义字符。


答案 1

将前导字符和尾随字符更改为 ,然后将每个字符替换为 。'/''"''\'"\\"

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

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


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

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


答案 2

您可以使用在线正则表达式赋值器(如 https://regex101.com)进行转换。

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

尽管它不是硬核程序员的方式,但它明显不那么容易出错。特别是如果您只需要转换一个或两个表达式。