正規表現とGWT


81

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

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

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

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()
アンドレイレジェントフ2013

@AndreyRegentovはい。確認して修正しました。これらのクラスの優れている点は、GWTが純粋なJavaバージョンを提供しているため、JUnitでそれらの使用法をテストできることです。
PhiLho 2014


19

この回答は、他の回答と同様に、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);

}

3
あなたはこれに絶対に正しいです。これはパズルの欠けている部分です。10倍たくさん!
gor 2013年

3

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


私はそれについて考えましたが、それが良い解決策であるとは思いませんでした
ludwigm 2009

0

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

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


こんにちは私は前にこのライブラリを試しました。これは、JReエミュレーションが欠落している場合の優れたソリューションですが、この場合、グループ化はサポートされていません。このための方法がありません。
ludwigm 2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.