【发布时间】:2017-04-10 10:45:21
【问题描述】:
我在 Javascript 中使用了以下正则表达式模式:
模式-
/\<span\>(\d{2}-\d{2}-\d{4})\s*?(\d{1,2}:\d{2}\s*?(?:am|pm))\s*?(?:<\/SPAN><BR\/?><SPAN>)?\s*?((\d[ -]*?){13,17})\s*?\<\/span\>/i
字符串 -
<SPAN>06-24-2015 11:28AM 0250 01 90775 05342</SPAN>
但是在将相同的模式字符串传递给 Pattern.compile() 函数时出现错误。
错误是:无效的转义序列。
这是我尝试过的:
Pattern p = Pattern.compile("/\<span\>(\d{2}-\d{2}-\d{4})\s*?(\d{1,2}:\d{2}\s*?(?:am|pm))\s*?(?:<\/SPAN><BR\/?><SPAN>)?\s*?((\d[ -]*?){13,17})\s*?\<\/span\>/i ");
Matcher m = p.matcher("<SPAN>06-24-2015 11:28AM 0250 01 90775 05342</SPAN>");
boolean b = m.matches();
请建议我如何纠正这个问题。
谢谢
编辑
知道cmets后我将代码更改为following,但现在我无法匹配模式:
Pattern p = Pattern.compile(
"(?i)/\\<span\\>(\\d{2}-\\d{2}-\\d{4})\\s*?(\\d{1,2}:\\d{2}\\s*?(?:am|pm))\\s*?(?:<\\/SPAN><BR\\/?><SPAN>)?\\s*?((\\d[ -]*?){13,17})\\s*?\\<\\/span\\>");
Matcher m = p.matcher("<SPAN>06-24-2015 11:28AM 0250 01 90775 05342</SPAN>");
boolean b = m.matches();
System.out.println("Do regex pattern matches : " + b);
【问题讨论】:
-
双反斜杠,将开头的
/替换为(?i),并删除末尾的/i。其余的由你来检查。并避免转义/- 它不是特殊的正则表达式元字符。 -
使用 \\ 而不是 \。喜欢
\\d而不是\d。 -
但现在我无法匹配模式 - 因为在
(?i)之后有/。不要逃避/、<和>。 -
谢谢@WiktorStribiżew 你能告诉我从哪里可以了解更多吗?
标签: javascript java regex