web-dev-qa-db-ja.com

正規表現とGWT

私の質問は次のとおりです。GWTで正規表現を使用する良い解決策はありますか?

たとえば、String.split(regex)の使用に満足していません。 GWTはコードをJSに変換し、正規表現をJS正規表現として使用します。しかし、Java MatcherまたはJava Pattern。のようなものは使用できません。しかし、グループのマッチングにはこれらが必要です。

可能性やライブラリはありますか?

Jakarta Regexpを試しましたが、GWTはJava SDKのこのライブラリが使用する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);
    }
} 
80
ludwigm

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

GWT 2.1には、問題を解決する可能性のある RegExp クラスがあります。

32

この回答は、ここでの他の回答のように、1つだけでなく、すべてのパターンマッチを対象としています。

関数:

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

}
19
Zbigniew Wiadro

純粋なGWTソリューションが必要な場合、それが実現できるかどうかはわかりません。ただし、JSNIを使用する場合は、JavaScriptのRegExpオブジェクトを使用して、一致したグループとすべてを取得できます。 GWTおよびJavaScript RegExpオブジェクトのJSNIを学ぶ必要があります。

3
Raze

GWTxライブラリ は、Java.util.regex.Patternおよび友人のエミュレーションを提供するようです。完全には見えませんが(特に、Matcher)、良いスタートになるかもしれません。

クライアント側のJavaクラスの独自の実装をプラグインするために使用する技術は<super-source>モジュールXMLでの宣言。これは、GWTのドキュメントの「1つのパッケージ実装を別のパッケージ実装にオーバーライドする」のモジュールXML形式の説明で言及されています。 GWTの標準JRE翻訳可能クラスも同じ方法でエミュレートされます。

0
mpodyachev