2011-12-06 24 views
2

任何人都可以请帮我在java正则表达式中执行以下操作吗?java正则表达式

我需要从给定字符串的第5个位置读取3个字符,忽略前后找到的任何字符。

例子:testXXXtest

预期结果:XXX

+0

为什么正则表达式?你尝试子字符串 – HRgiger

回答

13

你不需要正则表达式的。

只需使用字符串:一步

Pattern pattern = Pattern.compile(".{4}(.{3}).*"); 
Matcher matcher = pattern.matcher("testXXXtest"); 
matcher.matches(); 
String whatYouNeed = matcher.group(1); 

是什么意思,步: yourString.substring(4,7)

既然你确实需要使用正则表达式,你可以做这样的

.{4} - 任意四个字符

( - 开始拍摄组,即你需要什么

.{3} - 任何三个字符

) - 结束捕获组,你说对了,现在

.*后跟0或多个任意字符。

matcher.group(1) - 获得第一个(仅)捕获组。

+0

优秀 - 谢谢你 – javaagn

+0

@ user1083956:不客气 –

+0

感谢您的解释和它的作品像一个梦想..干杯 – javaagn

4

您应该能够使用substring()方法来实现:

string example = "testXXXtest"; 
string result = example.substring(4,7); 
+0

谢谢你。但不幸的是,这需要添加到使用正则表达式的现有框架。 – javaagn

+0

@javaagn这样的限制应该在问题中声明。 – gyorgyabraham

1

这可能帮助:Groups and capturing in java.util.regex.Pattern

下面是一个例子:

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

public class Example { 
    public static void main(String[] args) { 
    String text = "This is a testWithSomeDataInBetweentest."; 
    Pattern p = Pattern.compile("test([A-Za-z0-9]*)test"); 
    Matcher m = p.matcher(text); 
    if (m.find()) { 
     System.out.println("Matched: " + m.group(1)); 
    } else { 
     System.out.println("No match."); 
    } 
    } 
} 

此打印:

Matched: WithSomeDataInBetween 

如果你不想整个图案,而匹配输入字符串(而不是寻求一个子串会匹配),您可以使用matches()而不是find()。您可以使用find()继续搜索更多匹配的子字符串。

此外,您的问题没有指定两个“测试”字符串之间的可接受字符和字符串的长度。我认为任何长度都可以,包括零,并且我们寻找由小写字母和大写字母以及数字组成的子字符串。

+0

谢谢你。我希望有任何例子吗? – javaagn

1

你可以使用子字符串,你不需要一个正则表达式。

yourString.substring(4,7); 

我相信你也可以使用正则表达式,但为什么如果你不需要它。当然,你应该保护这个代码免受太短和空字符串的影响。

+0

正在寻找regEX模式。我知道在java中很容易,就像你以及之前提到的其他人一样。 – javaagn