정규식과 GWT


81

내 질문은 : 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);
    }
} 

답변:


96

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

2
그건 당신이시겠습니까 <=<<=matcher.getGroupCount()?
Andrey Regentov

@AndreyRegentov 예. 확인한 다음 수정했습니다. 이 클래스의 멋진 점은 GWT가 순수한 Java 버전을 제공하므로 JUnit으로 사용을 테스트 할 수 있다는 것입니다.
PhiLho


19

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

함수:

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

}

3
당신은 이것에 절대적으로 옳습니다. 이것은 퍼즐에서 빠진 조각입니다. 10 배 많이!
gor

3

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


나는 그것에 대해 생각하지만 난 그것을 좋은 해결책 발견되지 않았다
ludwigm

0

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

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


안녕하세요 저는 전에이 라이브러리를 시도했습니다. JRe 에뮬레이션 누락에 대한 좋은 솔루션이지만이 경우 그룹화를 지원하지 않습니다. 이를위한 방법이 없습니다.
ludwigm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.