2011-04-07 18 views
1

我需要一個正則表達式來匹配組成查詢的字符序列。我查詢的定義的一個例子是這樣的:和(貓,狗)在更一般的定義,它可以表示爲操作(操作數,操作數)它由一個包含運營商2個操作數。這些操作數可以是任何單個字母數字(非數字)或甚至另一個子查詢。一個例子是和(山羊,或(斑馬,熊))運營商是AND,或,而不是和查詢可以得到越來越多的AMBIGUOUS儘可能的程度。查詢中沒有WHITESPACE,我需要在Java應用程序中使用正則表達式。注:A NOT操作員只能有一個操作數,例如不是(老虎)。提前致謝。正則表達式匹配字符序列

+0

請不要喊叫。我修復了你的標題。 – 2011-04-07 05:29:56

+0

更好地嘗試解析複雜的表達式,如使用模式的查詢使用詞法和語法分析器,如C世界中的lexx和yacc(bison)。這給你更強大的定義你可以使用的標記和構造規則(語法中的生產規則)。這使用起來非常複雜,但如果您可以使用它,則會變得非常強大。 Google for Java與lexx和yacc for Java替代這些經典。 – 2011-04-07 05:43:32

回答

2

作爲操作數的子查詢使得這是不可能的。正則表達式對嵌套的東西來說不夠強大,你需要使用上下文無關的語法。

0

你的問題可能會更復雜,很難猜測你的確切方向。然而,這個簡單的Java例子也許一個很好的起點爲您提供:

 

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

public class Test { 

    public static void main(String[] args) { 
    String s = "add(1,sub(2,3))"; 
    Pattern p = Pattern.compile("(.*?)\\((.*)\\)"); 
    Matcher m1 = p.matcher(s); 
    if (m1.matches()) { 
     System.out.println(m1.group(1)); 
     System.out.println(m1.group(2)); 
    } 
    System.out.println(); 
    Matcher m2 = p.matcher(m1.group(2)); 
    if (m2.matches()) { 
     System.out.println(m2.group(1)); 
     System.out.println(m2.group(2)); 
    } 
    } 
} 
 

生產同類產品產量:

 

add 
1,sub(2,3) 

1,sub 
2,3