如何用正则表达式拆分字符串

时间:2014-04-14 22:01:57

标签: java regex

public String replace(){
    String[] parts = str.split("&([A-Za-z]+|[0-9]+|x[A-Fa-f0-9]+);");
    for (int i = 0; i < parts.length; i++) {
        System.out.println(parts[i]);

    }
    return "";
}

是什么让这一行完全“String [] parts = str.split(”&amp;([A-Za-z] + | [0-9] + | x [A-Fa-f0-9] +) ; “);”?我尝试了我的代码,但它没有做任何事情......可能有人给出了一个字符串示例,所以我可以看到它如何分裂?

2 个答案:

答案 0 :(得分:2)

以下是将由您提供的regex拆分的字符串示例。

import java.util.regex.*;


public class ReverseRegex{
    public static void main(String[] args) {
        String str = "hello &fjeaifjiajwta; world";
        String[] parts = str.split("&([A-Za-z]+|[0-9]+|x[A-Fa-f0-9]+);");
        for (int i = 0; i < parts.length; i++) {
            System.out.println(parts[i]);
        }
    }
}

以下是一些例子。

    String str = "hello &21342352352; world"; // Two pieces
    String str = "hello &xffea424242; world"; // Two pieces
    String str = "hello &xffea424242; world &hefiajeifjae; world"; // Three pieces.

答案 1 :(得分:0)

正则表达式显然是用于命名或编号的HTML实体引用,但它不完整。它缺少编号实体的哈希符号,并且不允许带有数字的名称,例如&sup2;&frac14;。这是我要用的:

"&(?:[a-zA-Z]+[0-9]*|#[0-9]+|#x[0-9a-fA-F]+);"

但是,我不明白为什么你会想要使用split()的正则表达式,它会丢弃它匹配的任何内容并返回其他所有内容。如果您想对实体本身做一些事情,您很可能想要使用find()。这是一个只收集列表中实体的例子;

List<String> matchList = new ArrayList<String>();
Pattern p = Pattern.compile("&(?:[a-zA-Z]+[0-9]*|#[0-9]+|#x[0-9a-fA-F]+);");
Matcher m = p.matcher(s);
while (m.find()) {
    matchList.add(m.group());
}