我知道 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 是无效的转义字符。
更改前导和尾随'/'
字符到'"'
,然后替换每个'\'
with "\\"
.
与 JavaScript、Perl 和其他脚本语言不同,Java 没有特殊的正则表达式语法。相反,它们(通常)使用 Java 字符串文字来表达。但'\'
是 Java 字符串文字中的转义字符,因此每个'\'
在原始正则表达式中必须用第二个转义'\'
。 (如果你在正则表达式中有一个反斜杠字符,你最终会得到"\\\\"
在 Java 字符串中!!)
对于 Java 新手来说,这有点令人困惑/令人畏惧,但它是完全合乎逻辑的。只要记住你使用的是 Java字符串字面量来表达正则表达式。
然而,正如 @antak 所指出的,Java 和 JavaScript 实现的正则表达式语言之间存在各种差异。因此,如果您采用任意 JavaScript 正则表达式并将其音译为 Java(如上所述),它可能不起作用。
以下是一些总结差异的参考资料。
- https://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines https://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines
- https://gist.github.com/CMCDragonkai/6c933f4a7d713ef712145c5eb94a1816 https://gist.github.com/CMCDragonkai/6c933f4a7d713ef712145c5eb94a1816
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)