java,正则表达式,&匹配

时间:2015-02-13 22:31:23

标签: java regex

我有一位朋友曾在某个时间点工作过。在学习正则表达式时,我不明白为什么它会像沙箱测试人员一样对它有所了解。

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> 

2 个答案:

答案 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语言使用与正则表达式相同的转义字符。

我强烈建议你花一个小时来完成以下免费的正则表达式教程:

http://regexone.com/

它是互动的,是一块蛋糕可以通过。当你完成后,我保证你会更好地理解它们。

对于第二个Jens,使用html解析器可能比使用正则表达式更好。你可以查看jsoup;这是我用的。

http://jsoup.org/

答案 1 :(得分:0)

字符/在Java中没有任何特殊含义 正则表达式语法/语言。只是:/字面值。

  

Java RegExp API支持的元字符是:<([{\^-=$!|]})?*+.>

见这里: http://docs.oracle.com/javase/tutorial/essential/regex/literals.html