计算在它们之前没有反斜杠的字符串中的引号

时间:2010-06-30 10:57:41

标签: ruby regex

嘿我正在尝试使用正则表达式来计算字符串中不带反斜杠的引号数。 例如以下字符串:

  • "\"Some text
  • "\"Some \"text

我之前使用的代码String#count('"') 显然这还不够好

当我计算这两个例子的引号时,我需要的结果只是1

我一直在这里寻找类似的问题,我尝试过使用lookbehinds,但无法让它们在ruby中工作。

我已在此Rubular

previous question上尝试了以下正则表达式
  • /[^\\]"/
  • ^"((?<!\\)[^"]+)"
  • ^"([^"]|(?<!\)\\")"

之后,他们都没有给我结果

也许正则表达式不是这样做的方法。也许编程方法是解决方案

2 个答案:

答案 0 :(得分:3)

string.count('"') - string.count("\\"")怎么样?

答案 1 :(得分:2)

result = subject.scan(
    /(?:        # match either
     ^         # start-of-string\/line
    |          # or
     \G        # the position where the previous match ended
    |          # or
     [^\\]     # one non-backslash character
    )          # then
    (\\\\)*    # match an even number of backslashes (0 is even, too)
    "          # match a quote/x)

给出一个包含所有引号字符的数组(可能带有前面的非引号字符),除了未转义的字符。

\G锚点需要匹配连续引号,(\\\\)*确保反斜杠只计算为转义符号,如果它们在引号之前以奇数出现(将Amarghosh的正确警告带入帐户)。