![](/img/trans.png)
[英]Using Regex in String.matches in java to match a date format
[英]Incompatibility when porting PHP preg_match logic to Java using String.matches
我發現這個問題,就如何端口PHP的preg_match
到Java(它建議使用String.matches()
不過,我還是有以下情況的麻煩:
PHP的 :
preg_match('/<(h1|h2|h3|h4|ul|td|div|table)/i', '<h1>')
=>返回1
Java的 :
"<h1>".matches("/<(h1|h2|h3|h4|ul|td|div|table)/i")
=>返回false
為什么會這樣呢?
您需要刪除正則表達式定界符。
並且您還需要添加(?i)
修飾符以進行不區分大小寫的匹配。
最后,你已經TYO添加>
在最后,因為matches
方法試圖將整個字符串相匹配。
"<h1>".matches("(?i)<(h1|h2|h3|h4|ul|td|div|table)>");
在Java中, matches()
需要完整的字符串匹配。 而且您不需要正則表達式定界符。
"<h1>".matches("(?i)<(h1|h2|h3|h4|ul|td|div|table)>")
如果您打算在Java中使用相同的正則表達式,請將Matcher
與find()
配合使用( find
將匹配輸入字符串中的任何位置,而Pattern.CASE_INSENSITIVE
將在PHP中充當i
選項):
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));
}
觀看另一個演示
在Java中,應為:
"<h1>".matches("(?i)<(h[1234]|ul|td|div|table)>");
即沒有正則表達式定界符和(?i)
用於忽略大小寫比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.