我有一位朋友曾在某个时间点工作过。在学习正则表达式时,我不明白为什么它会像沙箱测试人员一样对它有所了解。
private static final Pattern SUB_URL_PATTERN = Pattern.compile("href=\"(/*\\w*/*\\w*/\\d+.html)\">",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
上述正则表达式模式中的/是什么?这种模式已经破裂,我不确定如何解决。
这是它在调试器中出现的方式:
href="(/*\w*/*\w*/\d+.html)">
这是正则表达式如何分解?
href=" ... matches href="
/* ... matches 0 or more occurrences of /
\w* ... matches 0 or more occurrences of word characters
/* ... matches 0 or more occurrences of /
\w* ... matches 0 or more occurrences of word characters
/ ... matches a /
\d+ ... matches one or several digits
.html)"> ... matches /html
以下是网页来源的片段,它应该用来捕获href =" /reo/4890530477.html":
<a href="/reo/4890530477.html" class="i" data-ids="0:00j0j_jDfSzBcGgid"></a>
答案 0 :(得分:1)
final Pattern SUB_URL_PATTERN = Pattern.compile("href=\"/\\w+/\\w+/\\d+\\.html\"")
应匹配
href="/[word]/[word]/[number].html"
你可能想要:
final Pattern SUB_URL_PATTERN = Pattern.compile("href=\"(/\\w+)*/\\d+\\.html\"")
哪个匹配
href="[0+ groups of '/word']/[number].html"
使用Java,你需要使用两个反斜杠\\
来创建一个包含反斜杠的字符串...例如,如果你想要一个\d
的正则表达式模式,你需要一个字符串声明为"\\d"
,因为Java语言使用与正则表达式相同的转义字符。
我强烈建议你花一个小时来完成以下免费的正则表达式教程:
它是互动的,是一块蛋糕可以通过。当你完成后,我保证你会更好地理解它们。
对于第二个Jens,使用html解析器可能比使用正则表达式更好。你可以查看jsoup;这是我用的。
答案 1 :(得分:0)
字符/
在Java中没有任何特殊含义
正则表达式语法/语言。只是:/
字面值。
Java RegExp API支持的元字符是:
<([{\^-=$!|]})?*+.>
见这里: http://docs.oracle.com/javase/tutorial/essential/regex/literals.html