2016-07-19 4 views
0

파일을 읽는 중 일부 긴 문자열에서 일부 문자열 패턴 (` "isempty var0")을 찾으려고합니다. 정규식이 내 요구 사항에 해당하는지 확실하지 않습니까?문자열 패턴 찾기, Regex가 내 요구 사항에 적용됩니까?

더 정확하게 예상되는 문자열 패턴 isempty은 키워드이며 약간의 공백 뒤에 일부 Java 변수가 있습니다.

입력 문자열은 다음과 같이 할 수있다 :

"isempty var0 && v1== 56" 
"v2 == 50 || isempty var1" 
"Q3 == 100 || (isempty var2)" 
"isempty var3" 
"is thisnotisempty var4" 

그리고 예상 출력은 다음과 같습니다

현재
"isempty var0" 
"isempty var1" 
"isempty var2" 
"isempty var3" 
null 

내가 String.contains()를 사용하여 패턴을 찾기 위해 노력하고, 문자열 .CharAt(), String.indexOf() 메서드 등

Regex로 해결할 수 있을지 모르겠지만 ?? 누군가가 어떤 아이디어를 줄 수 있다면, 어떤 종류의 패턴을 찾으려면 정규식이 될 수 있습니까?

고마워요!

답변

1

이 시도 :

\bisempty\s+\w+ 

Online demo.

+0

나는 정규식을 처음 접했을 때 새로운 튜토리얼을 추천 해 줄 수 있니? –

+1

@shriduttkothari 나는 자습서를 모른다. 미안하다. 문서를 읽으면 정규식을 배웠다. –

+0

다음 문서를 공유 할 수 있습니까? –

1

귀하의 예는 매우 보면 당신은 원시 프로그램 코드를 처리하기 위해 노력하고있다.

짧은 대답은 예입니다. 정규식 패턴을 사용하여 찾고있는 값을 포함하고 있으면 해결할 수 있습니다. (\w+\s+\w+)과 같은 것은 출발점 일 것이지만, 아마도 그보다 더 복잡 할 것입니다.

긴 답변은 프로그램 코드를 처리하는 경우 텍스처 파싱 API를 사용해야 할 수도 있습니다. java code parser이라는 키워드를 사용하여 빠른 검색이 가능합니다. 파서는 정규 표현식이 테스트하고 검사 할 수있는 텍스트의 구조를 이해합니다. 따라서 구문 분석기는 코드 구조를 확인하고 isempty x 구문과 같은 특정 구문 구조를 식별해야 할 때 도움이됩니다.

1

예, 정규식을 사용하여 여러 가지 방법으로이 작업을 수행 할 수 있습니다. 하나의 옵션은 replaceAll입니다 :

public static void main(String[] args) throws Exception { 
    String s1 = "isempty var0 && v1== 56"; 
    String s2 = "isempty var3"; 
    String s3 = "is thisnotisempty var4"; 
    String s4 = "is thisnotisempty 4var4"; // returns empty string. Java variable names cannot start with a number. 
    String s5 = "Q3 == 100 || (isempty var2)"; 
    String s6 = "isempty var3"; 

    System.out.println(s1.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s2.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s3.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s4.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s5.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s6.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
} 

O/P :

isempty var0 
isempty var3 


isempty var2 
isempty var3 

PS : 문자열이 isempty someVar "가"하지 않는 경우에 당신이 여기 null을 (얻을하지 않습니다, 대신에 당신이 얻을 것이다 참고 빈 문자열.

관련 문제