नियमित अभिव्यक्ति और GWT


81

मेरा प्रश्न है: क्या GWT में नियमित अभिव्यक्ति का उपयोग करने के लिए एक अच्छा समाधान है?

मैं उदाहरण के लिए String.split (regex) के उपयोग से संतुष्ट नहीं हूँ। GWT JS को कोड ट्रांसलेट करता है और फिर regex को JS regex के रूप में उपयोग करता है। लेकिन मैं जावा मिलानकर्ता या जावा पैटर्न जैसी किसी चीज़ का उपयोग नहीं कर सकता। लेकिन मुझे समूह मिलान के लिए इनकी आवश्यकता होगी।

क्या कोई संभावना या पुस्तकालय है?

मैंने जकार्ता रेगेक्सप की कोशिश की, लेकिन मुझे अन्य समस्याएं थीं क्योंकि जीडब्ल्यूटी जावा एसडीके के सभी तरीकों का अनुकरण नहीं करता है जो इस पुस्तकालय का उपयोग करता है।

मैं ग्राहक पक्ष पर इस तरह से कुछ का उपयोग करने में सक्षम होना चाहता हूं:

// 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()?
एंड्रे रीजेंटोव

@AndreyRegentov हाँ। मैंने जाँच की, फिर तय किया कि। इन वर्गों के साथ क्या अच्छा है कि GWT एक शुद्ध जावा संस्करण की आपूर्ति करता है, इसलिए हम अभी भी JUnit के साथ उनके उपयोग का परीक्षण कर सकते हैं।
फीलो


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
आप इस पर बिल्कुल सही हैं। यह पहेली का गायब टुकड़ा है। 10x बहुत!
गोर

3

यदि आप शुद्ध GWT समाधान चाहते हैं, तो मुझे यकीन नहीं है कि यह किया जा सकता है। लेकिन अगर आप JSNI का उपयोग करने के लिए तैयार हैं, तो आप मिलान किए गए समूहों और सभी को प्राप्त करने के लिए जावास्क्रिप्ट के RegExp ऑब्जेक्ट का उपयोग कर सकते हैं। आपको GWT और जावास्क्रिप्ट RegExp ऑब्जेक्ट के लिए JSNI सीखने की आवश्यकता होगी।


मैं उस के बारे में सोचा था, लेकिन मैं इसे एक अच्छा समाधान नहीं मिला
ludwigm

0

GWTx पुस्तकालय java.util.regex.Pattern और दोस्तों के अनुकरण प्रदान करने के लिए लगता है। यह पूरा नहीं दिखता (विशेष रूप से मिलान), लेकिन एक अच्छी शुरुआत हो सकती है।

क्लाइंट साइड के लिए जावा कक्षाओं के अपने कार्यान्वयन को प्लग करने के लिए वे जिस तकनीक का उपयोग करते हैं वह <super-source>मॉड्यूल XML में घोषणा है। इसका उल्लेख जीडब्ल्यूटी डॉक्स, मॉड्यूल एक्सएमएल प्रारूप विवरण में "एक पैकेज के कार्यान्वयन को दूसरे के साथ ओवरराइड करने" के तहत किया गया है। GWT में मानक JRE अनुवाद योग्य कक्षाएं उसी तरह अनुकरण की जाती हैं।


हाय मैं इस पुस्तकालय से पहले की कोशिश की। यह लापता जेआरई अनुकरण के लिए एक अच्छा समाधान है, लेकिन इस मामले में यह समूहीकरण का समर्थन नहीं कर सकता है। इसके लिए तरीके गायब हैं।
ludwigm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.