2012-11-13 3 views
3

이 preg_split 코드를 Java 동등 물로 "변환"해야합니다. 나는 성공하지 못한 채 몇 가지 시도를 해왔다. 여기에 내가 번역을 시도하고있는 PHP 코드입니다 :이 preg_split에 해당하는 Java는 무엇입니까?

$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); 

당신이 볼 수 있듯이, 내 문자열 입력이 숫자 문자의 순서로 구성 될 수는, 그들 중 일부는 대괄호 []로 포장되고 :

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

대괄호는 문자열의 시작 또는 끝 부분에있을 수 있습니다. 아무런 제한이 없습니다.

위의 예에 따라, 결과는 다음과 같을 것이다 : 나는 정규 표현식을 번역하려고 몇 가지 문제를 발견했습니다

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

("\"과 같은 잘못된 이스케이프 시퀀스 실패).

+3

"\"를 정규식 메커니즘에 넣으려면 String에 "\\"로 써야합니다. 그러면 String에서 특수한 의미를 벗어날 수 있습니다. – Pshemo

+0

나는 당신의 preg_split이 당신이 말하는대로한다고 생각하지 않습니다. 입력 문자열 "234 [3 4 5] 6/4// 7/7 [8 9] 4"로 시도하십시오. 첫 번째 숫자는 한 자리 숫자로 반환됩니다. 두 개의/s가 사라집니다. 내 테스트를 참조하십시오 : http://codepad.org/C69hPk19 –

+0

안녕 사이먼,하지만 난 단지 숫자와 대괄호를받는거야, 나는 결코/ – afontcu

답변

3

문제를 "분할"로 생각하는 대신 찾고있는 양식의 단일 부분 문자열과 일치하는 정규 표현식을 찾은 다음 그 표현식의 모든 일치 항목을 수집하십시오 (예 :

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

오른쪽의 비트는 대괄호 사이의 모든 문자와 일치합니다.

자바 문자열 리터럴에 정규 표현식을 쓰고 싶다면 백 슬래시를 두 번 사용해야합니다. 리터럴 "\\"은 백 슬래시가 하나있는 단일 문자열을 나타냅니다.

+0

와우, 영리했다. 나는 실제로 \\ 물건을 생각해 냈지만, 당신이 말한대로 문제를 보지 않았습니다. 고마워요! – afontcu

관련 문제