什么是Java相当于这个preg_split?

时间:2012-11-13 23:25:51

标签: java regex

我必须将这个preg_split代码“翻译”为Java等价物。我尝试了一些没有成功的事情。这是我试图翻译的PHP代码:

$str="1 [3 4 5] 6 7 [8 9] 4";
$chars = preg_split("^\[(.*?)\]||/ /^", $str, -1, PREG_SPLIT_DELIM_CAPTURE);

foreach ($chars as $key => $value) {
    if(ord($value)!=0 && $value!=" "){
        $res[]=$value;
    }
}
print_r($res);

如您所见,我的String输入可以由任何数字字符序列组成,其中一些用[]括号包裹:

1 [3 4 5] 6 7 [8 9] 4

括号可以在字符串的开头或结尾处,对此没有限制。

按照上面的示例,结果如下所示:

[0] = "1"
[1] => "3 4 5"
[2] => "6"
[3] => "7"
[4] => "8 9"
[5] => "4"

我发现一些问题试图翻译正则表达式(看起来像“\”失败作为无效的转义序列)。

1 个答案:

答案 0 :(得分:3)

我不会将问题视为“拆分”,而是尝试提出一个匹配您正在寻找的表单的任何单个子字符串的正则表达式,然后收集该表达式的所有匹配项,例如:

Pattern p = Pattern.compile("(?<=\\[)[^\\]]+|\\d+");
Matcher m = p.matcher(inputStr);
List<String> matches = new ArrayList<String>();
while(m.find()) matches.add(m.group());

|左侧的位与方括号之间的任何位置匹配,右侧的位与任何其他数字序列匹配。

请注意,当您要在Java字符串文字中编写正则表达式时,需要将反斜杠加倍 - 文字"\\"表示包含一个反斜杠的单个字符串。