将这些正则表达式从javascript转换为Java
我已经用Javascript编写了正则表达式,现在我想把它们转换成Java:将这些正则表达式从javascript转换为Java,java,javascript,regex,Java,Javascript,Regex,我已经用Javascript编写了正则表达式,现在我想把它们转换成Java: var nat_pattern2 = /^\d{8}$/; var nat_pattern2 = /^\d{7}\-\d{1}$/; var pct_pattern1 = /^\PCT\/?[A-Z]{2}?\d{4}\/\d{6}$/; var ing pct_pattern2 = /^\PCT[A-Z]{2}\d{10
var nat_pattern2 = /^\d{8}$/;
var nat_pattern2 = /^\d{7}\-\d{1}$/;
var pct_pattern1 = /^\PCT\/?[A-Z]{2}?\d{4}\/\d{6}$/;
var ing pct_pattern2 = /^\PCT[A-Z]{2}\d{10}$/;
var pct_pattern3 = /^\P[A-Z]{2}\d{8}$/;
var its_pattern1 = /^\ITS\/?[A-Z]{2}?\d{2}\/\d{5}$/;
var its_pattern2 = /^\ITS[A-Z]{2}\d{7}$/;
var its_pattern3 = /^\I[A-Z]{2}\d{7}$/;
我的开头看起来像这样,但不正确:
Pattern=Pattern.compile(“/^\d{8}$/”代码>
您能帮助我吗?您不需要在Java中的regexp中使用/
<代码>\d
作为定义正则表达式的字符串的一部分而被转义,因此它将成为\\d
Pattern pattern = Pattern.compile("^\\d{8}$");
斜杠没有特殊含义,因此也不需要转义
Pattern natPattern1 = Pattern.compile("^\\d{8}$");
Pattern natPattern2 = Pattern.compile("^\\d{7}-\\d{1}$");
Pattern pctPattern1 = Pattern.compile("^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$");
Pattern pctPattern2 = Pattern.compile("^PCT[A-Z]{2}\\d{10}$");
Pattern pctPattern3 = Pattern.compile("^P[A-Z]{2}\\d{8}$");
Pattern itsPattern1 = Pattern.compile("^ITS/?[A-Z]{2}?\\d{2}/\\d{5}$");
Pattern itsPattern2 = Pattern.compile("^ITS[A-Z]{2}\\d{7}$");
Pattern itsPattern3 = Pattern.compile("^I[A-Z]{2}\\d{7}$");
Java中的regexp不需要
/
<代码>\d作为定义正则表达式的字符串的一部分而被转义,因此它将成为\\d
Pattern pattern = Pattern.compile("^\\d{8}$");
斜杠没有特殊含义,因此也不需要转义
Pattern natPattern1 = Pattern.compile("^\\d{8}$");
Pattern natPattern2 = Pattern.compile("^\\d{7}-\\d{1}$");
Pattern pctPattern1 = Pattern.compile("^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$");
Pattern pctPattern2 = Pattern.compile("^PCT[A-Z]{2}\\d{10}$");
Pattern pctPattern3 = Pattern.compile("^P[A-Z]{2}\\d{8}$");
Pattern itsPattern1 = Pattern.compile("^ITS/?[A-Z]{2}?\\d{2}/\\d{5}$");
Pattern itsPattern2 = Pattern.compile("^ITS[A-Z]{2}\\d{7}$");
Pattern itsPattern3 = Pattern.compile("^I[A-Z]{2}\\d{7}$");
\用于在Java字符串中转义。因此,你必须逃避现实。因此,您的字符串将如下所示:
Pattern pattern = Pattern.compile("^\\d{8}$");
如前所述,不需要开头和结尾
请注意,如果要匹配\必须在正则表达式中转义它。这意味着在Java字符串中有双转义。
要匹配\必须在Java中连接\\。使用\在Java字符串中转义。因此,你必须逃避现实。因此,您的字符串将如下所示:
Pattern pattern = Pattern.compile("^\\d{8}$");
如前所述,不需要开头和结尾
请注意,如果要匹配\必须在正则表达式中转义它。这意味着在Java字符串中有双转义。
要匹配\您必须在Java中连接\\。将正则表达式从JS转换为Java的要点:
- 无需周围环境
/
- 需要转义
(例如\
而不是\.
)\.
- 无需转义
(即/
变为\/
)/
- 无最终标志(例如,
,g
)i
您现在可以自己翻译regexp了(
;)代码>将正则表达式从JS转换为JAVA的要点:
- 无需周围环境
/
- 需要转义
\
(例如\.
而不是\.
)
- 无需转义
/
(即\/
变为/
)
- 无最终标志(例如,
g
,i
)
您现在可以自己翻译regexp了(;)代码>…这意味着您不需要在正则表达式中也避开斜杠。是的,他确实不需要斜杠。谢谢您,但我不确定这些是否正确。例如,字符串“PCT/SE2012/001083”应该与这些正则表达式中的一个匹配,但它不匹配。您能否再帮我验证一下这些正则表达式是否与我提供的javascript正则表达式匹配。谢谢!我已经研究这个问题一段时间了,它应该不是一个非常困难的问题,只是一些模式匹配。“PCT/SE2012/001083”。匹配(“^PCT/?[a-Z]{2}?\\d{4}/\\d{6}$”
返回true…这意味着您不需要逃避正则表达式中的斜杠,也是。是的,他确实不需要。谢谢你,但我不确定这些是否正确。例如,字符串“PCT/SE2012/001083”应该与这些正则表达式中的一个匹配,但它不匹配。您能否再帮我验证一下这些正则表达式是否与我提供的javascript正则表达式匹配。谢谢!我已经研究这个问题有一段时间了,它应该不是一个非常困难的问题,只是一些模式匹配。“PCT/SE2012/001083”。匹配(^PCT/?[a-Z]{2}?\\d{4}/\\d{6}$”
返回true。除了最后的标志,还有compile()的参数
方法,如模式.DOTALL
用于/i
等…感谢您的回答。我已经设法从我的正则表达式中得到了一些结果,但我认为匹配与javascript的匹配并不完全相同。单词“PCT/SE2012/001083”应与其中一种模式匹配,但不匹配。你能告诉我为什么吗?谢谢。@nickrosenscrantz“PCT/SE2012/001083”。匹配(^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$”)
由我返回true
。compile()
方法中有参数,如Pattern.DOTALL
for/i
等。谢谢回答。我已经设法从我的正则表达式中得到了一些结果,但我认为匹配与javascript的匹配并不完全相同。单词“PCT/SE2012/001083”应与其中一种模式匹配,但不匹配。你能告诉我为什么吗?谢谢。@Nickrosenscrantz“PCT/SE2012/001083”。匹配项(“^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$”)
由我返回true
,谢谢你的帮助性回答。但是为什么这些模式不匹配:“^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$”应该匹配像“PCT/SE2012/001083”这样的字符串,不是吗?当它的javascript版本匹配时,它不匹配的原因是什么?有没有不完整的地方?谢谢你的回答。但是为什么这些模式不匹配:“^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$”应该匹配像“PCT/SE2012/001083”这样的字符串,不是吗?当它的javascript版本匹配时,它不匹配的原因是什么?有没有不完整的地方?