gpt4 book ai didi

java - Android 正则表达式不匹配

转载 作者:行者123 更新时间:2023-12-02 12:58:57 25 4
gpt4 key购买 nike

这是我不太明白的事情。

我想从以下字符串中获取日期部分:

<th>Elkezdodott</th>
<td>2016. december 20., 19:29</td>

所以我使用以下代码:

System.out.println(html);
Pattern p = Pattern.compile("\\p{Punct}th\\p{Punct}Elkezdodott\\p{Punct}{2}th\\p{Punct}\\p{Space}*" +
"\\p{Punct}td\\p{Punct}" +
"(\\d{4}\\p{Punct}\\p{Space}*[a-zA-Z]*\\p{Space}*\\d*\\p{Punct}{2}" +
"\\p{Space}*\\d{2}\\p{Punct}\\d{2})\\p{Punct}{2}td\\p{Punct}");
Matcher m = p.matcher(html);
if(m.matches()){
System.out.println("matches");
System.out.println(m.group());
}

根据 Android StudioCheck RegExp 选项,此正则表达式似乎是正确的:

enter image description here

System.out.println(html) 的结果与您在图像上看到的完全相同:

06-03 11:49:15.779 4581-5229/hu.lyra.moly_kihivasok I/System.out: <th>Elkezdodott</th>
06-03 11:49:15.779 4581-5229/hu.lyra.moly_kihivasok I/System.out: <td>2016. december 20., 19:29</td>

我真正不明白的是为什么m.matches()返回false。我也尝试过m.find(),但得到了相同的结果。我错过了什么吗?

感谢您的建议。

最佳答案

我已经执行了您的确切示例,它与字符串匹配。您做错的唯一一件事是没有将参数传递给group()函数。您需要定义要匹配的组。就您而言,这将是第一个。因此,请使用group(1);

<小时/>

顺便说一句。你为什么使用如此复杂的模式来匹配你的字符串?我不会经常使用 \p{} ,因为它使它不可读。只需使用这个:

"<th>Elkezdodott</th>\\n<td>(\\d{4}\\.\\s*[a-zA-Z]+\\s*\\d{1,2}\\.,\\s*\\d{2}:\\d{2})</td>"
<小时/>

顺便说一句。^2 您不应该使用正则表达式来解析 HTML。请改用 HTML 解析器。周围有很多。如果您尝试使用正则表达式解析 HTML,您很快就会遇到重大问题(嵌套、错误的 HTML,例如缺少结束标记等)。

关于java - Android 正则表达式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44342554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com