如何获取字符串Java中通配符的值?

How to get the value of a wildcard in a string Java?

此代码在 javascript 中有效,是否可以在 java 中执行类似的操作? (获取字符串中通配符的值)

    var a = "HI MY NAME IS BOB"

    var b = /HI MY NAME IS (.*)/

    alert("HI " + b.exec(a)[1])

您需要的 class 是 Pattern。它在功能上与 regex 类似,但机制不同。 Here 是文档的 link。

您可能需要找到 捕获的组 #1:

Pattern p = Pattern.compile("(?i)Hi MY NAME IS (.*)");
Matcher m = p.matcher("Hi MY NAME IS BOB");
if (m.find()) {
     System.out.println( "Group #1: " + m.group(1) ); // BOB
}
  • (?i) 用于忽略大小写匹配
  • m.group(1) 将从您的正则表达式中给出第一个捕获组的值,即 (.*)

您要找的是 java.util.regex 包。

正则表达式的语法是一个完全不同的答案,但我假设您在这里有点熟悉。

要在 Java 中使用正则表达式,您需要创建两个对象,一个 Pattern 和一个 Matcher

引用文档,Pattern 对象是 "A compiled representation of a regular expression",Matcher 对象是 "An engine that performs match operations on a character sequence by interpreting a Pattern."

换句话说,您使用 Pattern 来定义您的正则表达式,并使用 Matcher 来应用它。

让我们逐行分析:

import java.util.regex.*;
String a = "MY NAME is BOB";

显然,您需要导入包并定义要应用正则表达式的字符串。

Pattern wildcard = Pattern.compile("HI MY NAME IS (.*)");

Pattern.compile 采用 String 表示正则表达式,returns 采用 Pattern.

Matcher match = wildcard.matcher(a);

Pattern 对象有一个实例方法,matcher,它接受你想要应用 Pattern 的字符串,和 returns 一个 Matcher .

System.out.println(match.group(1));

调用 match.group(n) returns 匹配第 nth 组括号的字符串(更准确地说,是第 nth 捕获组) 在你的正则表达式中。 match.group(0),相当于match.group(),returns表示你整个匹配的字符串。在这种情况下,我们使用 match.group(1) 因为我们想要匹配正则表达式中唯一的一组括号 - 最后的 (.*)

将它们放在一起,我们得到:

import java.util.regex.*;
String a = "MY NAME is BOB";
Pattern wildcard = Pattern.compile("HI MY NAME IS (.*)");
Matcher match = wildcard.matcher(a);
System.out.println(match.group(1));

这并不完全是您所要求的,但我想尽力提供一些帮助。您可以使用 substring() 打印出 "BOB"。这是对我有用的:String a = new String("Hi my name is Bob"); System.out.printf("This print as Bob\n%s",a.substring(14));子字符串从索引 14 开始并打印到字符串的末尾。