正则表达式与空格的断开链接

时间:2015-10-21 12:43:22

标签: java regex href

我正在使用此正则表达式

public static class Node {
    int value;
    Node next;

    Node(int value){
        this.value = value;
        this.next = null;
    }
}

获取链接
public static void deleteDups(Node n) {
    Hashtable<Integer, Boolean> table = new Hashtable<Integer, Boolean>();
    Node previous = null;
    while (n != null) {
        if (table.containsKey(n.value)) previous.next = n.next;
        else {
            table.put(n.value, true);
            previous = n;
        }
        n = n.next;
    }
    }

public static void printList(Node list) {
    Node currentNode = list;
    while(currentNode != null) {
        System.out.print(currentNode.value + ", ");
        currentNode = currentNode.next;
    }
    System.out.println("");

}

网址格式错误。它包含一个空格。问题是我希望获得包括“5678”在内的整个链接,但我只能获得“www.example.com/1234”。

我对正则表达式不太好。有人可以提供有效的正则表达式,以便我可以获得整个网址“www.example.com/1234 5678”。

由于

1 个答案:

答案 0 :(得分:2)

  

外部程序会创建一个包含多个<a href=www.example.com/1234 5678>标记的html电子邮件。

假设您无法在源代码级别修复它,可以尝试使用正则表达式进行修复。

如果href属性是唯一属性,则您不必关心=之后的空格。从您的模式中移除\\s,它将起作用。

private static final String HREF_PATTERN = 
   "(?i)\\s*href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">]+))";
                                                     ^

如果您拥有值的属性,则必须使用预测:

private static final String HREF_PATTERN = 
    (?i)\\s*href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">]+(?=>|\\s+\\w+=)))

请参阅regex demo

但是,这不适用于nofollow等属性。