gpt4 book ai didi

java - 为什么正则表达式不能正常工作?

转载 作者:行者123 更新时间:2023-12-01 09:03:45 25 4
gpt4 key购买 nike

我有一些String,例如

s3://my-source-bucket/molomics/molecules35455720556210282.csv 或,s3://my-source-bucket/molecules10282.csvs3://my-source-bucket/molename

标准:

1. the portion of `s3://` is fixed
2. the bucket name will be consists of letters, numbers and dash(-) and dots(.), say,
my-source-bucket and will be followed by /
3. Number 2 will repeat one or more time
4. In the end there will be no /

我想使用正则表达式来匹配它们。我有一个小程序,用于获取下面提供的匹配项,

public static void findMatchUsingRegex(String input) {

String REGEX = "(w+://)([0-9A-Za-z-]+/)([0-9A-Za-z-/]+)([0-9A-Za-z-.]+)?";
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(input); // get a matcher object
while(m.find()) {
count++;
System.out.println("Match number "+count);
System.out.println("start(): "+m.start());
System.out.println("end(): "+m.end());
}
}

在在线编辑器中,我找到了匹配项。但是,这些匹配项在程序的实际运行中不会按预期返回任何内容。如何更改正则表达式以使其正常工作并且可能更好地工作?

最佳答案

一些要点

  1. 标准 #1 规定 s3:// 是固定的,因此您可以明确使用它。
  2. 您需要转义特殊的正则表达式字符,例如 .-/。由于您将正则表达式编写为 Java 字符串,因此需要使用两个反斜杠:\\. 来匹配文字 ..
  3. 看来您可以大大简化您的模式。
  4. 我不知道 findMatchUsingRegex 到底应该做什么,但请确保您想要使用 Pattern.find 而不是 Pattern.match >.

解决方案

s3:\/(\/[0-9A-Za-z\-\.]+)+

请注意 \/ 是如何排在前面的,因此字符串必须以数字、字母、.- 结尾。在 Java 中,您需要将其写为:

s3:\\/(\\/[0-9A-Za-z\\-\\.]+)+

(从技术上讲,您不需要在这里转义 -.。但这可能是一个很好的做法,因为它们是特殊字符。)

关于java - 为什么正则表达式不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com