我知道正则表达式在各种语言中都很常见……但是我在编写 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 许可协议
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(如上所述),它可能无法正常工作。
以下是一些总结差异的参考资料。