我找到this question关于如何将PHP preg_match
移植到Java(它建议使用String.matches()
。但是,我仍遇到以下情况的问题:
PHP :
preg_match('/<(h1|h2|h3|h4|ul|td|div|table)/i', '<h1>')
=&gt;返回1
爪哇:
"<h1>".matches("/<(h1|h2|h3|h4|ul|td|div|table)/i")
=&gt;返回false
为什么会这样?
答案 0 :(得分:1)
您需要删除正则表达式分隔符。
此外,您还需要添加(?i)
修饰符以进行不区分大小写的匹配。
最后,由于>
方法尝试匹配整个字符串,所以最后添加matches
。
"<h1>".matches("(?i)<(h1|h2|h3|h4|ul|td|div|table)>");
答案 1 :(得分:1)
在Java中,matches()
需要完整的字符串匹配。而且你不需要正则表达式分隔符。
"<h1>".matches("(?i)<(h1|h2|h3|h4|ul|td|div|table)>")
请参阅IDEONE demo
如果您计划在Java中使用相同的正则表达式,请将Matcher
与find()
一起使用(find
将匹配输入字符串中的任意位置,Pattern.CASE_INSENSITIVE
将充当{i
PHP中的1}}选项:
String str = "<h1>";
String rx = "<(h1|h2|h3|h4|ul|td|div|table)";
Pattern ptrn = Pattern.compile(rx, Pattern.CASE_INSENSITIVE);
Matcher m = ptrn.matcher(str);
while (m.find()) {
System.out.println(m.group(0));
}
请参阅another demo
答案 2 :(得分:0)
在Java中它应该是:
"<h1>".matches("(?i)<(h[1234]|ul|td|div|table)>");
即。没有正则表达式分隔符和(?i)
用于忽略大小写比较。