[java] 정규식과 GWT

내 질문은 : GWT에서 정규식을 사용하는 좋은 솔루션이 있습니까?

예를 들어 String.split (regex) 사용에 만족하지 않습니다. GWT는 코드를 JS로 변환 한 다음 정규식을 JS 정규식으로 사용합니다. 그러나 Java Matcher 또는 Java Pattern과 같은 것을 사용할 수 없습니다. 하지만 그룹 매칭을 위해서는 이것들이 필요합니다.

가능성이나 도서관이 있습니까?

Jakarta Regexp를 시도했지만 GWT가이 라이브러리가 사용하는 Java SDK의 모든 메소드를 에뮬레이트하지 않기 때문에 다른 문제가있었습니다.

클라이언트 측에서 다음과 같은 것을 사용할 수 있기를 원합니다.

// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find();

if (matchFound) {
    // Get all groups for this match
    for (int i=0; i<=matcher.groupCount(); i++) {
        String groupStr = matcher.group(i);
        System.out.println(groupStr);
    }
}



답변

RegExp를 사용하는 동일한 코드는 다음과 같습니다.

// Compile and use regular expression
RegExp regExp = RegExp.compile(patternStr);
MatchResult matcher = regExp.exec(inputStr);
boolean matchFound = matcher != null; // equivalent to regExp.test(inputStr); 

if (matchFound) {
    // Get all groups for this match
    for (int i = 0; i < matcher.getGroupCount(); i++) {
        String groupStr = matcher.getGroup(i);
        System.out.println(groupStr);
    }
}


답변

GWT 2.1에는 이제 RegExp문제를 해결할 수 있는 클래스가 있습니다.


답변

이 답변은 여기 다른 답변에서와 같이 하나뿐만 아니라 모든 패턴 일치를 다룹니다.

함수:

private ArrayList<String> getMatches(String input, String pattern) {
    ArrayList<String> matches = new ArrayList<String>();
    RegExp regExp = RegExp.compile(pattern, "g");
    for (MatchResult matcher = regExp.exec(input); matcher != null; matcher = regExp.exec(input)) {
       matches.add(matcher.getGroup(0));
    }
    return matches;
}

… 및 샘플 사용 :

ArrayList<String> matches = getMatches(someInputStr, "\\$\\{[A-Za-z_0-9]+\\}");
for (int i = 0; i < matches.size(); i++) {
    String match = matches.get(i);

}


답변

순수한 GWT 솔루션을 원하면 할 수 있을지 모르겠습니다. 그러나 JSNI를 사용하려는 경우 JavaScript의 RegExp 개체를 사용하여 일치하는 그룹과 모두를 가져올 수 있습니다. GWT 및 JavaScript RegExp 객체에 대한 JSNI를 배워야합니다.


답변

GWTx 라이브러리가 있으며, java.util.regex.Pattern과 친구의 에뮬레이션을 제공 할 것으로 보인다. 완전 해 보이지는 않지만 (특히 Matcher) 좋은 시작일 수 있습니다.

클라이언트 측에 대한 Java 클래스의 자체 구현을 연결하는 데 사용하는 기술 <super-source>은 모듈 XML 의 선언입니다. “한 패키지 구현을 다른 패키지 구현으로 재정의”아래의 GWT 문서, 모듈 XML 형식 설명에 언급되어 있습니다. GWT의 표준 JRE 번역 가능 클래스는 동일한 방식으로 에뮬레이션됩니다.


답변