Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式_Java_Regex - Fatal编程技术网

Java 正则表达式

Java 正则表达式,java,regex,Java,Regex,有人能帮我在java正则表达式中完成以下操作吗 我需要从给定字符串的第5个位置读取3个字符,忽略之前和之后发现的内容 示例:testXXXtest 预期结果:XXX您根本不需要正则表达式 只需使用子字符串:yourString.substring(4,7) 由于您确实需要使用正则表达式,您可以这样做: Pattern pattern = Pattern.compile(".{4}(.{3}).*"); Matcher matcher = pattern.matcher("testXXXtest"

有人能帮我在java正则表达式中完成以下操作吗

我需要从给定字符串的第5个位置读取3个字符,忽略之前和之后发现的内容

示例:
testXXXtest

预期结果:
XXX
您根本不需要正则表达式

只需使用子字符串:
yourString.substring(4,7)

由于您确实需要使用正则表达式,您可以这样做:

Pattern pattern = Pattern.compile(".{4}(.{3}).*");
Matcher matcher = pattern.matcher("testXXXtest");
matcher.matches();
String whatYouNeed = matcher.group(1);
这是什么意思,一步一步:

{4}
-任意四个字符

-开始捕获组,即您需要的组

{3}
-任意三个字符

-结束捕获组,现在就可以了

*
后跟0个或更多任意字符


matcher.group(1)
-获取第一个(唯一)捕获组

您应该能够使用该方法来完成此任务:

string example = "testXXXtest";
string result = example.substring(4,7);
这可能会有所帮助:

以下是一个例子:

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()
继续在后续调用中搜索更多匹配的子字符串


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

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

yourString.substring(4,7);

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

使用String.replaceAll()类方法

如果不需要对性能进行优化,可以尝试使用String.replaceAll()类方法获得更简洁的选项:

String sDataLine = "testXXXtest";
String sWhatYouNeed = sDataLine.replaceAll( ".{4}(.{3}).*", "$1" );
参考资料


为什么使用正则表达式?你试过了吗?谢谢你。但不幸的是,这需要添加到使用正则表达式的现有框架中。@javaagn此类约束应该在问题中声明。我正在寻找正则表达式模式。我知道java很容易,就像你和其他人之前提到的那样。谢谢你的解释,它工作起来就像一场梦。。干杯因为你反应很快,我可以直接问你一个问题吗?在该字符串中,“ABC Y C S 1$46C M 2/10 S Y FWPIV2”。我需要创建一个正则表达式模式来提取2/20。前面的所有字段和空格都被填充以使其固定长度。例如ABC直到Y是一个单词,然后Y C S。。。适当填充空间。我不知道我已经解释清楚了。。