此代码在javascript中工作,是否可以在java中执行类似的操作? (获取字符串中的通配符的值)
var a = "HI MY NAME IS BOB"
var b = /HI MY NAME IS (.*)/
alert("HI " + b.exec(a)[1])
答案 0 :(得分: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)
会从您的正则表达式中提供第一个捕获组的值,即(.*)
答案 1 :(得分:1)
您正在寻找的是java.util.regex套餐。
正则表达式的语法是一个完全不同的答案,但我假设你在这里稍微熟悉它。
要在Java中使用正则表达式,您需要创建两个对象,Pattern
和Matcher
。
引用文档,Pattern
对象是"正则表达式#34;和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 th 括号组的字符串(更准确地说,n th 捕获组)你的正则表达式。 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));
答案 2 :(得分:0)
您需要的课程是Pattern
。它的功能类似于regex
,但机制不同。 Here是文档的链接。
答案 3 :(得分:0)
这并不完全是你所要求的,但我想尝试一点帮助。你可以打印出来" BOB"使用substring()。这对我有用:String a = new String("我的名字是Bob"); System.out.printf("此打印为Bob \ n%s",a.substring(14));子字符串从索引14开始并打印到字符串的末尾。