我有一个只有一个组的正则表达式模式.我需要在模式后面的输入字符串中查找文本并仅替换匹配组1.例如,我有正则表达式模式和要应用的字符串,如下所示.替换字符串是"<---->"
Pattern p = Pattern.compile("\\w*(lan)\\w+");
Matcher m = p.matcher("plan plans lander planitia");
Run Code Online (Sandbox Code Playgroud)
预期的结果是
plan p<--->s <--->der p<--->itia
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法
String test = "plan plans lander planitia";
Pattern p = Pattern.compile("\\w*(lan)\\w+");
Matcher m = p.matcher(test);
String result = "";
while(m.find()){
result = test.replaceAll(m.group(1),"<--->");
}
System.out.print(result);
Run Code Online (Sandbox Code Playgroud)
这给出了结果
p<---> p<--->s <--->der p<--->itia
Run Code Online (Sandbox Code Playgroud)
另一种方法
String test = "plan plans lander planitia";
Pattern p = Pattern.compile("\\w*(lan)\\w+");
Matcher m = p.matcher(test);
String result = "";
while(m.find()){
result = test.replaceAll("\\w*(lan)\\w+","<--->");
}
System.out.print(result);
Run Code Online (Sandbox Code Playgroud)
结果是
plan <---> <---> <--->
Run Code Online (Sandbox Code Playgroud)
我已经通过了 …
我正在努力记住在Java中使用find-replace regex匹配的正确表示法.
说我有字符串
String s = "My name is ''Eric'' and I have a bee called ''Eric''
and a fish called ''Wanda''."
Run Code Online (Sandbox Code Playgroud)
我想做类似以下的事情:
s.replaceAll("\'\'$$\'\'", "$$");
Run Code Online (Sandbox Code Playgroud)
给:我的名字是Eric,我有一只名叫Eric的蜜蜂和一只名叫Wanda的鱼.
但我知道$$不是正确的符号来捕捉''中的任何内容并用它来代替找到的匹配.
我在这里寻找的特别符号是什么?
提前致谢.
戴夫.
我有一个看起来像这样的字符串:
0,0,1,2,4,5,3,4,6
Run Code Online (Sandbox Code Playgroud)
我想要的是返回的是String[]每三个逗号后分割的内容,因此结果如下所示:
[ "0,0,1", "2,4,5", "3,4,6" ]
Run Code Online (Sandbox Code Playgroud)
我发现了类似的功能,但它们没有分成第n个逗号.
我需要替换一个字符串:
"abc.T.T.AT.T"
Run Code Online (Sandbox Code Playgroud)
到一个字符串,所有单个T被替换为TOTlike
"abc.TOT.TOT.AT.TOT"
Run Code Online (Sandbox Code Playgroud)
strings.replaceAll 不为此工作.
可能重复:
Java Regex替换为捕获组
有没有办法用修改后的捕获组内容替换正则表达式?
例:
Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher(text);
resultString = regexMatcher.replaceAll("$1"); // *3 ??
Run Code Online (Sandbox Code Playgroud)
而且我想用$ 1替换所有出现次数乘以3.
编辑:
看起来,有些不对劲:(
如果我使用
Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher("12 54 1 65");
try {
String resultString = regexMatcher.replaceAll(regexMatcher.group(1));
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
它抛出IllegalStateException:找不到匹配项
但
Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher("12 54 1 65");
try {
String resultString = regexMatcher.replaceAll("$1");
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
工作正常,但我不能改变$ 1 :(
EDIT2:
现在,它的工作:)
请考虑您有以下字符串:
id: 1 name: Joe age: 27 id: 2 name: Mary age:22
Run Code Online (Sandbox Code Playgroud)
并且你想在"年龄:"之后提取每个标记,但不是字符串"age:"本身.
所以我希望我Matcher的group()回归27和22而不是"年龄:27"和"年龄:22"
有没有办法在Java Regex语法中指定这个指令,这看起来与Perl中的指令完全不同,在Perl中我学习了我的Regex基础知识?
这是我的代码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegExTest
{
public static void main(String[] args)
{
Pattern namePtrn = Pattern.compile("age: *\\w*");
String data = "id: 1 name: Joe age:27 id: 2 name: Mary age:22";
Matcher nameMtchr = namePtrn.matcher(data);
while(nameMtchr.find())
{
String find = nameMtchr.group();
System.out.println ("\t" + find);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Perl中,我可以使用{}来限制我想要提取的模式部分
while($text =~ m/(age:{\w+})/g)
{
my $find = $1;
if($find) …Run Code Online (Sandbox Code Playgroud)