Normal İfadeler ve GWT


81

Sorularım şu: GWT'de normal ifadeyi kullanmanın iyi bir çözümü var mı?

Örneğin String.split (regex) kullanımından memnun değilim. GWT, Kodu JS'ye çevirir ve ardından normal ifadeyi bir JS normal ifadesi olarak kullanır. Ancak Java Matcher veya Java Pattern gibi bir şey kullanamıyorum. Ama grup eşleştirme için bunlara ihtiyacım olacak.

Herhangi bir olasılık veya kütüphane var mı?

Jakarta Regexp'i denedim, ancak başka sorunlar yaşadım çünkü GWT, bu kütüphanenin kullandığı Java SDK'nın tüm yöntemlerini taklit etmiyor.

İstemci tarafında buna benzer bir şey kullanabilmek istiyorum:

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

Yanıtlar:


96

RegExp kullanan aynı kod şunlar olabilir:

// 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
O emin misin <=olmamalı <içinde <=matcher.getGroupCount()?
Andrey Regentov

@AndreyRegentov Evet. Kontrol ettim, sonra düzelttim. Bu sınıflarda harika olan şey, GWT'nin saf bir Java sürümü sağlamasıdır, böylece kullanımlarını JUnit ile test edebiliriz.
PhiLho

32

GWT 2.1 artık RegExpsorununuzu çözebilecek bir sınıfa sahip:


1
RexExp yazım hatasını düzeltmenizi ve bağlantıyı satır içi yerine RegExp'in arkasına koymanızı öneririm.
antony.trupe

19

Bu cevap, buradaki diğer cevaplarda olduğu gibi, yalnızca birini değil, TÜM kalıp eşleşmelerini kapsar:

İşlev:

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

... ve örnek kullanım:

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

}

3
Bu konuda kesinlikle haklısın. Bu, bulmacanın eksik parçası. 10x çok!
gor

3

Saf bir GWT çözümü istiyorsanız, bunun yapılabileceğinden emin değilim. Ancak JSNI kullanmak istiyorsanız, eşleşen grupları ve tümünü almak için JavaScript'in RegExp nesnesini kullanabilirsiniz. GWT ve JavaScript RegExp nesnesi için JSNI öğrenmeniz gerekir.


bunu düşündüm ama güzel bir çözüm
bulamadım

0

GWTx kütüphane java.util.regex.Pattern ve arkadaşlarıyla bir öykünme sağlamak gibi görünüyor. Tam görünmüyor (özellikle Matcher), ancak iyi bir başlangıç ​​olabilir.

İstemci tarafı için kendi Java sınıfı uygulamalarını eklemek için kullandıkları teknik, <super-source>XML modülündeki beyandır. GWT belgelerinde, modül XML biçim açıklamasında "Bir paket uygulamasının diğeriyle geçersiz kılınması" altında bahsedilmektedir. GWT'deki standart JRE çevrilebilir sınıfları aynı şekilde taklit edilir.


merhaba bu kütüphaneyi daha önce denedim. eksik JRe öykünmesi için güzel bir çözümdür, ancak bu durumda gruplamayı desteklemez. Bunun için yöntemler eksik.
ludwigm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.