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

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

本文关键字:获取 通配符 Java 字符串      更新时间:2023-09-26

这段代码在javascript中工作,是否可以在java中做类似的事情?(获取字符串中通配符的值)

    var a = "HI MY NAME IS BOB"
    var b = /HI MY NAME IS (.*)/
    alert("HI " + b.exec(a)[1])

可能需要找到捕获的组 #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对象是"正则表达式的编译表示形式",Matcher对象是"通过解释Pattern对字符序列执行匹配操作的引擎"。

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

因此,让我们逐行进行:

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

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

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

Pattern.compile 采用表示正则表达式的String并返回一个Pattern

Matcher match = wildcard.matcher(a);

Pattern对象都有一个实例方法 matcher ,该方法获取要应用Pattern的字符串,并返回一个Matcher

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

调用 match.group(n) 将返回与正则表达式中的第 n 组括号(更准确地说, n捕获组)匹配的字符串。 match.group(0) 等效于 match.group() 返回表示整个匹配项的字符串。在这种情况下,我们使用 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));

您需要的类是Pattern 。它在功能上与regex相似,但机制不同。这是文档的链接。

这并不完全是你要求的,但我想尽量帮上一点忙。您可以使用子字符串()打印出"BOB"。以下是对我有用的方法:字符串 a = 新字符串("嗨,我的名字是鲍勃");System.out.printf("This print as Bob'%s",a.substring(14));子字符串从索引 14 开始,打印到字符串的末尾。