[英]Regex to match single quotes being quoted by double-quotes
这是一个正在尝试工作的正则表达式:
(?:"[^"]*"[^"]*)*?\"{1}([^"]*?([']{1,})[^"]*?)\"
它可能不是实现我想做的最干净也不是最有效的方式,但我认为我几乎就在那里。
我的目标是匹配双引号(“)之间引用的任何单引号(') ,因此前面需要有一个奇数的双引号。我知道现在它只匹配第一组单引号,没关系。我最终会使用这个正则表达式替换第一次出现然后迭代并再次使用它来替换其他的只要有一些。
这里有一些例子:
请注意,我真的不认为自己是专家,前几天我几乎什么都不知道,除了经典[a-zA-Z0-9] ...欢迎任何帮助,我可能忽略了一些基本的东西。
我一直在这里工作: https : //regex101.com/r/aE7iB8/1
好吧,这是一个适用于所有样本的正则表达式 - 但它有点长,而且不是很完全可读。 我希望我能正确获得java模式的所有转义。
(?:(?:^|\\G(?<!^)[^'\"]*\")[^\"]*+(?:"[^\"']*"[^\"]*)*+"|\\G(?<!^))[^'\"]*+(')
这使用\\G
-matcher,它将在最后一个模式的末尾和后续修饰符匹配,以避免不必要的回溯。
让我们从最后开始, [^'\\"]*+(')
匹配任何字符,这不是单引号或双引号后跟单引号,而是被捕获到一个组中。
\\\\G(?<!^)
在最后一场比赛结束时匹配( (?<!^)
用于确保我们不在字符串的开头,因为那是第一个\\G
的位置在任何匹配之前运行。所以我们将尝试,如果在双引号内有另一个单引号我们在最后一场比赛中。
(?:^|\\\\G(?<!^)[^'\\"]*\\")[^\\"]*+(?:"[^\\"']*"[^\\"]*)*+"
用于跳过双引号之外或不包含单引号的所有序列。 ^|\\\\G(?<!^)[^'\\"]*\\"
匹配字符串的开头(第一次匹配)或匹配,直到我们上一次匹配的结束双引号,如果没有其他单引号内。 [^\\"]*+
然后匹配任何不是双引号的东西。 (?:"[^\\"']*"[^\\"]*)*+"
然后匹配任何不包含单引号的双引号和单引号之外的序列,直到我们达到双引号,开始匹配单引号。
但我想一个演示显示它比我解释的更好,所以你在这里: https : //regex101.com/r/tW5xH4/1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.