完整字符串,以便与正则表达式匹配

时间:2014-01-17 04:15:30

标签: java regex string extend

我有一个字符串和正则表达式如下:

fb
f(\w+)=\1

我想用这些来生成:

fb=b

有没有办法在Java中这样做?我可以使用.matches()确认fbf(\w+)匹配,但我无法弄清楚如何扩展字符串以匹配完整的正则表达式。我发现Xeger正在搜索,但这似乎生成随机匹配字符串。

我看到的一种可能性是使用Xeger生成表格

的潜在字符串
f(\w+)=\1

然后检查结果的前两个字符是否为fb,但是不那么麻烦吗?

我有许多与此类似的格式的字符串,其中有一个量化的二进制操作和第一个参数的匹配。我需要生成适当的第二个参数。进一步的例子:

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

生成Rba

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

生成a

2 个答案:

答案 0 :(得分: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());
    }
}
}

答案 1 :(得分:0)

您应该使用String方法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