我想在以下字符串中标识某些值,特别是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上添加了
.*
,以便输出替换整个输入,但是对于您的情况不是必需的。)