Java 需要帮助修改正则表达式吗

Java 需要帮助修改正则表达式吗,java,regex,Java,Regex,总有一天我会精通正则表达式,但现在 我正在解析一个HTML页面,使用以下表达式查找MP3文件(有效): ”了解更多信息 Replace \.mp3 with \.((mp3)|(ogg)) 注意用正则表达式解析HTML。了解模式 您具有以下Java字符串文字: // Java string literal "<A HREF=\"([^\"]+)\"[^>]*>([^<]+?)\\.mp3</A>" 作为Java字符串文字,这是: "<

总有一天我会精通正则表达式,但现在

我正在解析一个HTML页面,使用以下表达式查找MP3文件(有效):

”了解更多信息

Replace 
    \.mp3
with
    \.((mp3)|(ogg))
注意用正则表达式解析HTML。

了解模式 您具有以下Java字符串文字:

// Java string literal
"<A HREF=\"([^\"]+)\"[^>]*>([^<]+?)\\.mp3</A>"
作为Java字符串文字,这是:

"<A HREF=\"([^\"]+)\"[^>]*>([^<]+)\\.(mp3|ogg)</A>"
”。类似于
[aeiou]
的内容匹配任何一个小写元音<代码>[^…]
是一个否定字符类<代码>[^aeiou]
匹配除小写元音以外的任何一个元音

(…)
是一个。它允许以后检索匹配的字符串

*
+
是。默认情况下,重复是贪婪的(即尽可能多地匹配)。
+?
中的
使其不情愿(即尽可能少地匹配)

请注意,
也可以在其他上下文中用作

是一个元字符。因为我们需要一个文字句点,所以我们通过在前面加上双斜杠来转义它


请注意,正则表达式模式默认情况下区分大小写。在Java中,您可能希望在模式中使用标志(可嵌入为
(?i)
)。

为什么使用双括号<代码>\(mp3 | ogg)放在括号里就足够了,因为我的前意识将(这个|那个)解析为匹配这个帽子或那个东西,我必须通过应用优先规则有意识地覆盖它。+1而不是仅仅给出答案,你真的超越了,解释了如何和为什么。你是那种需要更多帮助的人。
// the regex pattern
<A HREF="([^"]+)"[^>]*>([^<]+?)\.mp3</A>
_________       _     _        E________
<A HREF="([^"]+)"[^>]*>([^<]+?)\.mp3</A>
         \_____/       \______/
            1              2
<A HREF="([^"]+)"[^>]*>([^<]+)\.(mp3|ogg)</A>
         \_____/       \_____/  \_______/
          1:url      2:filename   3:ext
"<A HREF=\"([^\"]+)\"[^>]*>([^<]+)\\.(mp3|ogg)</A>"