2012-10-31 4 views
1

다음과 같은 문자열이 있습니다. i는 상기 문자열을 발생할 때마다자바가있는 정규식

$Alarm:com.Alarm(a == 123 || (count == 12345 || (time matches "24" && pqr =="1"))) 
$Event:com.Event(b == 123 || (co == 12345 || (time matches "204" && pqr =="22"))) 

은 내가 문자열 아래 $Event:com.Event(...)위한 문자열 $Alarm:com.Alarm(...)"from EventStream""from AlarmStream"의 문자열을 추가해야 의미 다음 string.I를 생성 할 필요가있다.

$Alarm:com.Alarm(a == 123 || (count == 12345 || (time matches "24" && pqr =="1"))) from AlarmStream 

$Event:com.Event(b == 123 || (co == 12345 || (time matches "204" && pqr =="22"))) from EventStream 

현재 다음 패턴을 사용하여 java에서 동일하게 처리합니다.

Pattern alarmPattern = Pattern.compile(".*?\\.Alarm\\(([^\\(]*?|\\([^\\)]*?\\))*\\)"); 
Pattern eventPattern = Pattern.compile(".*?\\.Event\\(([^\\(]*?|\\([^\\)]*?\\))*\\)"); 

올바른 출력을 얻지 못하고 있습니다.

올바른 출력을 얻으려면 몇 가지 포인터를 제공하십시오. 정규 표현식은 마지막 괄호 만 고려해야하며 여기서 왼쪽 및 오른쪽 괄호 쌍의 수는 고정되어 있지 않습니다. 증가 또는 감소 할 수 있습니다. 논리가 작동해야합니다. 왼쪽 및 오른쪽 괄호 쌍의 수에는 제한이 없습니다.

+0

하면 알람 및 파일에 이벤트 객체를 저장하고 있습니까? java.util.Properties (사람이 읽을 수있는 텍스트 프로퍼티의 경우) 및 java.io.Serializable를 참조하십시오. XML 직렬화를위한 JAXB도 있습니다. – ignis

답변

2

여기에 RegEx가 필요한 이유는 무엇입니까? 나는 코드 FO에도 이러한 유형의 당신을 위해 잘 작동해야한다고 생각 :

유사
if (str.startsWith("$Alarm:com.Alarm")) 
    str = str + " from AlarmStream"; 
else if (str.startsWith("$Event:com.Event")) 
    str = str + " from EventStream"; 
+0

여기서 문제는 문자열에이 두 문자열 ($ Alarm : com.Alarm (a == 123 || (개수 == 12345 || (시간은 "24"&& pqr == "1"과 일치))뿐만 아니라) 두 문자열은 실제 들어오는 문자열의 하위 문자열입니다. 그러나 정확한 위치를 알 수 없습니다. $ 이벤트 : com.Event (b == 123 || (co == 12345 || "&& pqr =="22 "))) from EventStream) – user1668653

+0

그런 경우 [String # contains] (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang)를 사용할 수 있습니다. /String.html#contains(java.lang.CharSequence)) 대신'startsWith'를 사용하십시오. – anubhava

0

이전 솔루션에 :

str += str.startsWith("$Alarm:com.Alarm")?" from AlarmStream":str.startsWith("$Event:com.Event")?" from EventStream":""; 
+0

그 이유는 작동하지 않습니다 -> 여기서 문제는 문자열에이 두 문자열 ($ Alarm : com.Alarm (a == 123 || (개수 == 12345 || "&& pqr =="1 "))) 두 문자열은 실제 들어오는 문자열의 하위 문자열입니다. 그러나 정확한 위치는 알 수 없습니다 $ Event : com.Event (b == 123 || (co == 12345 || (EventStream에서 "204"&& pqr == "22")))) – user1668653