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

如何在Java字符串中获取通配符的值?,java,javascript,regex,string,parsing,Java,Javascript,Regex,String,Parsing,此代码在javascript中工作,是否可以在java中执行类似的操作?(获取字符串中通配符的值) 您需要的类是Pattern。它在功能上与regex类似,但机制不同。是文档的链接。您可能需要查找捕获的组#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( "Gro

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


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

您可能需要查找捕获的组#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中使用正则表达式,需要创建两个对象,一个
模式
和一个
匹配器

System.out.println(match.group(1));
引用文档,
模式
对象是“正则表达式的编译表示,
匹配器
对象是“通过解释
模式
对字符序列执行匹配操作的引擎”

换句话说,使用
模式
定义正则表达式,使用
匹配器
应用正则表达式

让我们一行一行地看一下:

import java.util.regex.*;
String a = "MY NAME is BOB";
显然,您需要导入包并定义要应用正则表达式的字符串

Pattern wildcard = Pattern.compile("HI MY NAME IS (.*)");
Pattern.compile
获取表示正则表达式的
字符串,并返回
模式

Matcher match = wildcard.matcher(a);
Pattern
对象有一个实例方法,
matcher
,它获取要应用
模式的字符串,并返回一个
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));

这不完全是你所要求的,但我想尽量帮点忙。可以使用子字符串()打印“BOB”。以下是对我有用的东西:String a=新String(“嗨,我的名字是Bob”);
System.out.printf(“此打印为Bob\n%s”,a.substring(14));子字符串从索引14开始,打印到字符串的末尾

你的问题一点也不清楚?仔细解释一下。你已经标记了你的问题
regex
。您知道正则表达式是什么吗?用于尝试regex为什么要从问题中删除regex标记?您的问题的一个解释是“我如何在Java中使用正则表达式?”@nnnnnn,因为我不确定是否会有一个非正则表达式的答案(不知何故),但鉴于答案是基于正则表达式的,我将放回标记。另外,当您的正则表达式是
HY
时,请检查第一个字符串是否为
HI
,这似乎是一个问题的输入错误。这是一个清晰而好的答案,但阿努巴瓦已经提供了同样的东西。我想到了这一点,但对于我所需要的已经很简单了