无法在Java中获得正则表达式的匹配项

时间:2012-11-16 01:59:07

标签: java regex

这是我想要获取数据的字符串的格式/示例:

<span style='display:block;margin-bottom:3px;'><a style='margin:4px;color:#B82933;font-size:120%' href='/cartelera/pelicula/18312'>Español  </a></span><br><span style='display:block;margin-bottom:3px;'><a style='margin:4px;color:#FBEBC4;font-size:120%' href='/cartelera/pelicula/18313'>Subtitulada  </a></span><br>          </div>

这是我正在使用的正则表达式:

"pelicula/([0-9]*)'>([\\w\\s]*)</a>"

我在RegexPlanet中测试了这个正则表达式,结果没问题,它给了我预期的结果:

group(1) = 18313
group(2) = Subtitulada

但是当我尝试在Java中实现该正则表达式时,它不会匹配任何东西。这是代码:

Pattern pattern = Pattern.compile("pelicula/([0-9]*)'>([\\w\\s]*)</a>");              
            Matcher matcher = pattern.matcher(inputLine);            
            while(matcher.find()){
                    version = matcher.group(2);
                }
            }

问题是什么?如果正则表达式已经过测试,并且在相同的代码中我搜索了更多模式,但我遇到了两个问题(我在这里只展示了一个)。提前谢谢!

_ 修改 _ _ < / p>

我发现了问题...如果我检查页面的源代码它会显示所有内容,但是当我尝试从Java中使用它时,它会获得另一个源代码。为什么?因为此页面要求您的城市,所以它可以显示有关该城市的信息。我不知道是否有关于实际访问我想要的信息的解决方法,但就是这样。

2 个答案:

答案 0 :(得分:2)

您的正则表达式是正确的,但似乎\wñ不匹配。

我将正则表达式更改为

"pelicula/([0-9]*)'>(.*?)</a>"

它似乎匹配两个事件。 在这里,我使用了不情愿的*?运算符来阻止.*匹配首先<a>到最后<\a>之间的所有字符 有关说明,请参阅What is the difference between `Greedy` and `Reluctant` regular expression quantifiers?

@Bohemian指出,如果Pattern.DOTALL中的文字有换行符,您可能需要启用<a>标记

答案 1 :(得分:1)

如果你的输入是多行(即它包含换行符),你需要打开“点匹配换行符”。

有两种方法可以做到这一点:

在你的正则表达式中使用“dot matches newline”正则表达式开关(?s)

Pattern pattern = Pattern.compile("(?s)pelicula/([0-9]*)'>([\\w\\s]*)</a>");

或在Pattern.DOTALL的调用中使用Pattern.compile()标记:

Pattern pattern = Pattern.compile("pelicula/([0-9]*)'>([\\w\\s]*)</a>", Pattern.DOTALL);