2014-01-17 33 views
0

我有一個字符串,如正則表達式如下:完整的字符串,使其匹配正則表達式

我想用這些來生成:

fb=b 

有沒有辦法做到這在Java中?我可以確認fb使用.matches()匹配f(\w+),但我無法弄清楚如何擴展字符串以匹配完整的正則表達式。我發現Xeger在搜索,但是這似乎會產生隨機匹配的字符串。

我看到一個可能性是使用Xeger生成表單

f(\w+)=\1 

的潛在字符串,然後檢查如果結果的前兩個字符是fb,但有少麻煩的方式?

我有一些類似的格式的字符串,其中有一個量化的二進制操作和匹配的第一個參數。我需要生成適當的第二個參數。更多示例:

Rab 
R(\w+)(\w+)=R\2\1 

生成Rba

Fa&Ga 
(F(\w+)=G\1) implies \1 

生成a

+0

請提供您想要生成字符串的一些例子。 – SaurabhJinturkar

+0

[本文](http://www.regular-expressions.info/java.html)向您展示瞭如何在Java正則表達式中使用反向引用。搜索該頁面上的'replaceAll'來快速轉發。 – Ralf

回答

0

您可以使用java.util.regex.Pattern和java.util.regex.Matcher來解決您的問題。我發佈了一個代碼片段,其輸出將是任何以'f'開頭的字符串和任意數量的字符跟着它。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
class Test 
{ 
public static void main(final String[] args) 
{ 
    final Pattern pattern = Pattern.compile("f(\\w+)"); 
    final Matcher matcher = pattern.matcher("fb=1"); 
    while (matcher.find()) 
    { 
     System.out.println(matcher.group()); 
    } 
} 
} 
+0

這只是匹配給定的字符串與模式。 – SaurabhJinturkar

+0

這有助於!我使用'matcher.group()'來選擇匹配的組,這正是我所需要的。然後我用相匹配的組代替二進制操作來找到正確的匹配。謝謝! –

0

你應該使用字符串的方法replaceFirst(..)或的replaceAll(..):

String s1 = "fb"; 
String r1 = s1.replaceFirst("(f(\\w+))", "$1=$2"); 
System.out.println(r1); 
// fb=b 

String s2 = "Rab"; 
String r2 = s2.replaceFirst("(R)(\\w+)(\\w+)", "$1$3$2"); 
System.out.println(r2); 
// Rba 

String s3 = "Fa&Ga"; 
String r3 = s3.replaceFirst("F(\\w+)&G\\1", "$1"); 
System.out.println(r3); 
// a