我有一个字符串和正则表达式如下:
fb
f(\w+)=\1
我想用这些来生成:
fb=b
有没有办法在Java中这样做?我可以使用.matches()确认fb
与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 :(得分: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