【问题标题】:RegEx match multiple expressions?正则表达式匹配多个表达式?
【发布时间】:2015-03-11 22:52:38
【问题描述】:
(<link.*>)|(<img.*>)|(<input.*type=\"image\".*>)|(<script.*src=\".*\".*>)

我正在编写一个正则表达式,以便用 HTML 中的 Base64 数据 URI(不相关)替换所有出现的内联静态内容。每个表达式都可以自己完美地工作,但是我需要按顺序排列它们,并且编写排序算法对于我正在处理的数据来说有点疯狂(这已经很疯狂了)。我认为这应该可行,但它不匹配那里的第一个 RegEx,但不匹配其他 RegEx。你如何匹配任何表达式?

<link.*>
<img.*>
<input.*type=\"image\".*>
<script.*src=\".*\".*>

我的 Java 代码:

    private final Pattern inlineLink = Pattern.compile("(<link.*>)|(<img.*>)|(<input.*type=\"image\".*>)|(<script.*src=\".*\".*>)", Pattern.CASE_INSENSITIVE);



Matcher mtch = inlineLink.matcher(html);
    while (mtch.find()) {
        String o = mtch.group();
        if (!o.contains("href=")) continue;
        String href = o.substring(o.indexOf("href=") + 5);
        if (href.startsWith("\"")) {
            href = href.substring(1, href.indexOf("\"", 1));
        }else {
            href = href.substring(0, href.indexOf(" "));
        }
        href = processHREF(href);
//do other stuffs

【问题讨论】:

    标签: java regex


    【解决方案1】:

    我建议将斜线加倍并将替代项放在第一个捕获组中。

    Pattern inlineLink = Pattern.compile("(<link.*>|<img.*>|<input.*type=\\\"image\\\".*>|<script.*src=\\\".*\\\".*>)", Pattern.CASE_INSENSITIVE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多