这段代码在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 开始,打印到字符串的末尾。