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

CreditCard Number="123" CVC="213" Date="2015-12"

(?<=CVC=\").*(?=")匹配213" Date="2015-12。如何修改正则表达式,以便在找到某些内容后查找第一个双引号匹配项,而不是像现在一样查找最后一个双引号?

更进一步:如何在超前定义通配符?理想情况下,我想表达一下:
(?<=CreditCard.*CVC=\").*(?=")表示CVC语句必须以“ CreditCard”字符串开头,但是它们之间可以有任何值。

最佳答案

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

(?<=CVC=\").*?(?=")


RegExr

在回答您的第二个问题时,java正则表达式(和大多数其他引擎)不允许使用可变长度的回溯。通常,尽管如此,您可以使用捕获组来解决一个问题,该问题需要回首可变长度:

(?<=CreditCard.*CVC=\").*?(?=")


变成:

CreditCard.*?CVC=\"(.*?)"


然后,您可以从捕获组1中获取相关信息。
RegExr(在RegExr上添加了.*,以便输出替换整个输入,但是对于您的情况不是必需的。)

10-02 04:27