Ruby Regex – 需要替换正则表达式匹配中每个字符的出现

这是我的字符串:

mystring = %Q{object1="this is, a testyay', asdkf'asfkd", object2="yo ho', ho"}

我将在逗号上拆分mystring ,因此我想(暂时)分出位于转义引号之间的逗号。

所以,我需要匹配转义引号+一些字符+一个或多个逗号+转义引号,然后在匹配的字符串中gsub逗号。

我想出的gsub的正则表达式是/(".*?),(.*?")/ ,我就像这样使用它: newstring = mystring.gsub(/(".*?),(.*?")/ , "\\1|TEMPSUBSTITUTESTRING|\\2") ,但这只替换它在转义引号之间找到的第一个逗号。

如何让它替换所有逗号?

谢谢。

我相信这是达到你想要的结果的一种方法。

 newstring = mystring.gsub(/".*?,.*?"/) {|s| s.gsub( ",", "|TEMPSUBSTITUTESTRING|" ) } 

它将匹配的字符串(引用的部分)传递给代码块,然后代码块替换所有出现的逗号。 最初的正则表达式可能是/".*?"/ ,但它可能效率较低,因为即使它没有逗号,也会为每个引用的字符串调用代码块。

不要为此烦恼,只需在这个正则表达式上拆分mystring

 ,(?=(?:[^"]*"[^"]*")*[^"]*$) 

前瞻断言,逗号之后是偶数引号,这意味着它不在引用值内。