Java 如何在前瞻中添加通配符?

Java 如何在前瞻中添加通配符?,java,regex,lookahead,Java,Regex,Lookahead,我想确定以下字符串中的某些值,特别是CVC和Number中的值: CreditCard Number=“123”CVC=“213”Date=“2015-12” (?您可以简单地使*不贪婪*? (?<=CVC=\").*?(?=") 然后您可以从捕获组1获取相关信息。 (*添加到RegExr中,这样输出就可以替换整个输入,但您的情况不需要这样。)您只需使*不贪婪*? (?<=CVC=\").*?(?=") 然后您可以从捕获组1获取相关信息。 (*添加到RegExr中,以便输出替换整

我想确定以下字符串中的某些值,特别是CVC和Number中的值:

CreditCard Number=“123”CVC=“213”Date=“2015-12”


(?您可以简单地使
*
不贪婪
*?

(?<=CVC=\").*?(?=")
然后您可以从捕获组1获取相关信息。
*
添加到RegExr中,这样输出就可以替换整个输入,但您的情况不需要这样。)

您只需使
*
不贪婪
*?

(?<=CVC=\").*?(?=")
然后您可以从捕获组1获取相关信息。
*
添加到RegExr中,以便输出替换整个输入,但您的案例不需要这样做。)

您可以跳过使用lookbehinds,而是使用集群来提取所需字符串的部分:

CreditCard Number="(/d*)".*\sCVC="(/d*)"
然后编号为1和2的“匹配组”将分别对应于您的信用卡号和CVC。(您可以使用
Matcher.group(int)
检索各个组的值)请注意,通过使用
\d
专门匹配数字,您不必使
*
非贪婪。在这种情况下,它可以工作,因为您只想匹配数字。在一般情况下(假设信用卡号可以由任何非引号字符组成),您可以使用自定义字符类来匹配除分隔符(本例中为引号)以外的任何内容:


您可以跳过使用lookbehinds,而是使用集群来提取您想要的字符串部分:

CreditCard Number="(/d*)".*\sCVC="(/d*)"
然后编号为1和2的“匹配组”将分别对应于您的信用卡号和CVC。(您可以使用
Matcher.group(int)
检索各个组的值)请注意,通过使用
\d
专门匹配数字,您不必使
*
非贪婪。在这种情况下,它可以工作,因为您只想匹配数字。在一般情况下(假设信用卡号可以由任何非引号字符组成),您可以使用自定义字符类来匹配除分隔符(本例中为引号)以外的任何内容:


问题是,在这种情况下,您真的需要先行/后置,还是只需匹配
信用卡。*CVC=\“(.*)”
然后抓取第一个捕获组?我想抓取双引号中的内容。您的正则表达式可以匹配任何内容,包括字符串creditCard和cvc,不是吗?@OGHaza我猜GMTA.+1作为您的答案。@membersound自您发表评论以来,我可能已经简化了最后一个正则表达式,但我向您保证它不会匹配,您只会使用它但是捕获组1的内容。在RegExr上,您可以将其设置为替换模式,并将替换文本设置为
[$1-$1-$1]
,然后您将看到
[213-213-213]
在输出中,因为
213
是在
$1
中捕获的,所以问题是,在这种情况下,您真的需要向前看/向后看,还是只需要匹配
信用卡。*CVC=\'(.*)”
然后抓取第一个捕获组?我想抓取双引号中的内容。您的正则表达式可以匹配任何内容,包括字符串creditCard和cvc,不是吗?@OGHaza我猜GMTA.+1作为您的答案。@membersound自您发表评论以来,我可能已经简化了最后一个正则表达式,但我向您保证它不会匹配,您只会使用它但是捕获组1的内容。在RegExr上,您可以将其设置为替换模式,并将替换文本设置为
[$1-$1-$1]
,然后您将在输出中看到
[213-213-213]
,因为
213
是在
$1
中捕获的
CreditCard Number="([^"]*)".*\sCVC="([^"]*)"