Ruby 有没有办法在两个双引号内匹配双引号?
我尝试了以下正则表达式,但它匹配所有双引号:Ruby 有没有办法在两个双引号内匹配双引号?,ruby,regex,Ruby,Regex,我尝试了以下正则表达式,但它匹配所有双引号: (?>(?<=(")|))"(?(1)(?!")) 我想匹配的模式是第2行的双引号之间的双引号作为一般规则,我会说:否 给定一个字符串: \"Burger\" \"Decaf\" shirt\" 你如何决定哪个是多余的(不匹配的)?这个是在汉堡之后,一个在脱咖啡因之后,还是在衬衫之后,还是在这些词之前?我相信这个选择是任意的 尽管在您的特定示例中似乎希望所有的\“都与逗号不相邻 这些可以通过以下regexp找到: (?<!^)(
(?>(?<=(")|))"(?(1)(?!"))
我想匹配的模式是
第2行的双引号之间的双引号作为一般规则,我会说:否
给定一个字符串:
\"Burger\" \"Decaf\" shirt\"
你如何决定哪个是多余的(不匹配的)?这个是在汉堡之后,一个在脱咖啡因之后,还是在衬衫之后,还是在这些词之前?我相信这个选择是任意的
尽管在您的特定示例中似乎希望所有的\“
都与逗号不相邻
这些可以通过以下regexp找到:
(?<!^)(?<![,\[])\\"(?![,\]])
假设字符串的格式必须如下所示:
["item1", "item2", ... "itemN"]
知道双引号是否为右引号的方法是检查它后面是否有逗号或右括号。
要查找由双引号括起来的双引号,必须从开始到意外引号匹配所有格式良好的项目
查找第一个随附报价(如果存在)的示例:
但是,这只适用于所有字符串中的一个封闭引号,如果要查找所有引号,则没有用处
要查找所有引号,请执行以下操作:
(?:\G(?!\A)|(?:\A[^"]*|[^"]*",\s*)(?:"[^"]*",\s*)*+")[^"]*\K"(?!\s*[\],])
也许吧。@Stribizov非常感谢。这就像是正则表达式网站的魅力所在,但当我在我的Ruby代码中尝试这一点时,它的工作方式不同,而且它无法接受。我想正则表达式对ruby有不同的语法来匹配它。谢谢@Mirosław Zalewski,这很有效,细节对于理解我在模式中遗漏了什么非常有用。我也想到了同样的问题,但这是在解决了其他3个奇怪的模式之后。非常感谢@Casmir!也很有帮助!
["item1", "item2", ... "itemN"]
(?:"[^"]*",\s*)*+"[^"]*\K"
(?:\G(?!\A)|(?:\A[^"]*|[^"]*",\s*)(?:"[^"]*",\s*)*+")[^"]*\K"(?!\s*[\],])