Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > ereg на Java


Автор: ShurikA 13.5.2008, 08:32
Что есть по типу РНР-шного ereg в Java?

Автор: ShurikA 13.5.2008, 09:32
Нужно переделать вот это на Java:
Код

while( strlen($agent) > 0 )
    {
        if ($l = ereg($pattern, $agent, $a))
        {
            // product, version, comment
            array_push($products, array($a[1],    // Product
            $a[3],    // Version
            $a[6]));  // Comment
            $agent = substr($agent, $l);
        }
        else
        {
            $agent = "";
        }
    }

Автор: ivg 13.5.2008, 13:20
Код

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    private static String NAME_PATTERN = "[\\w\\s]+";
    private static String VERSION_PATTERN = "[\\d\\.]+";
    private static String COMMENT_PATTERN = "[^\\-]*";
    private static String DUMMY_PATTERN = "[^\\-]*";
    
    private static Pattern SEARCH_PATTERN;
    
     static {
        synchronized(Test.class) {
            StringBuilder b = new StringBuilder().append("(").append(NAME_PATTERN)
            .append(")-(").append(DUMMY_PATTERN).append(")-(").append(VERSION_PATTERN)
            .append(")-(").append(DUMMY_PATTERN).append(")-(").append(DUMMY_PATTERN)
            .append(")-(").append(COMMENT_PATTERN).append(")");
            SEARCH_PATTERN = Pattern.compile(b.toString(), Pattern.CASE_INSENSITIVE);
        }
    }
    
    public static class Product {
        private String name;
        private String version;
        private String comment;
        
        public Product(String name, String version, String comment) {
            this.name = name;
            this.version = version;
            this.comment = comment;
        }
        
        public String toString() {
            return "Product: " + this.name + ", version: " + this.version +
            ", comment: " + this.comment;
        }
        
    }

    public static void main(String[] args) {
        for (Product p : parseProduct("Sausage-????-1.0-???-????-nyam!! nyam!!")) {
            System.out.println(p);
        }
    }
    
    public static List<Product> parseProduct(String input) {
        List<Product> res = new ArrayList<Product>();
        Matcher m = SEARCH_PATTERN.matcher(input);
        while(m.find()) {
            if (m.groupCount() < 6) {
                throw new IllegalArgumentException("input string illegal");
            }
            Product p = new Product(m.group(1), m.group(3), m.group(6));
            res.add(p);
        }
        
        return res;
    }

}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)