我知道 regEx 在各种语言中都很常见...但是我在编写 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 是一个无效的转义字符。
最佳答案
将'/'
开头和结尾的字符改为'"'
,然后将每个'\'
替换为"\\"
.
与 JavaScript、Perl 和其他脚本语言不同,Java 没有用于正则表达式的特殊语法。相反,它们(通常)使用 Java 字符串文字表示。但是 '\'
是 Java 字符串文字中的转义字符,因此原始正则表达式中的每个 '\'
都必须使用第二个 '\' 进行转义
。 (如果你在正则表达式中有一个文字反斜杠字符,你最终会在 Java 字符串文字中得到 "\\\\"
!!)
这对于 Java 新手来说有点令人困惑/令人生畏,但这是完全合乎逻辑的。请记住,您使用的是 Java 字符串文字 来表达正则表达式。
然而,正如@antak 所说,Java 和 JavaScript 实现的正则表达式语言之间存在各种差异。因此,如果您采用任意 JavaScript 正则表达式并将其音译为 Java(如上所述),它可能无法正常工作。
这里有一些总结差异的引用资料。
关于java - 将 Javascript 正则表达式转换为 Java 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754444/