3

我必须将此 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"

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

4

1 回答 1

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 字符串文字中编写正则表达式时,您需要将反斜杠加倍 - 文字"\\"表示包含一个反斜杠的单个字符串。

于 2012-11-13T23:52:29.767 回答